Shirates에서 화면 닉네임을 사용하는 방법

이 글은 모바일 테스트 자동화 도구인 를 사용하는 방법을 소개합니다.

화면 닉네임



Shirates에서는 Screen Nickname을 JSON 파일로 정의할 수 있습니다. Screen Nickname은 테스트 코드를 읽기 쉽고 생산적으로 만듭니다.

화면 닉네임 기능


  • 현재 표시된 화면 식별
  • 화면
  • Selector Nicknames 제공



    재료



    [ https://github.com/wave1008/shirates-samples-nicknames ]에서 완전한 샘플 프로젝트를 얻을 수 있습니다.


    예제 1: 계산기


  • Android Emulator를 시작합니다.
  • 계산기 앱을 실행합니다.


  • Appium Inspector를 시작합니다.
  • 캡처 계산기 앱.


  • [Calculator Main Screen].json 디렉토리 아래에 testConfig/screens/calculator를 만듭니다.


  • Appium Inspector를 사용하여 화면 요소를 검사하고 다음과 같이 화면 별명 파일을 편집합니다.

  • [계산기 메인화면].json




    {
      "key": "[Calculator Main Screen]",
    
      "identity": "[AC][()]",
    
      "selectors": {
        "[formula]": "#formula",
        "[result final]": "#result_final",
        "[result preview]": "#result_preview",
    
        "[√]": "#op_sqrt",
        "[π]": "#const_pi",
        "[^]": "#op_pow",
        "[!]": "#op_fact",
    
        "[AC]": "#clr",
        "[()]": "#parens",
        "[%]": "#op_pct",
    
        "[÷]": "#op_div",
        "[×]": "#op_mul",
        "[-]": "#op_sub",
        "[+]": "#op_add",
        "[=]": "#eq",
        "[⌫]": "#del",
    
        "[0]": "#digit_0",
        "[1]": "#digit_1",
        "[2]": "#digit_2",
        "[3]": "#digit_3",
        "[4]": "#digit_4",
        "[5]": "#digit_5",
        "[6]": "#digit_6",
        "[7]": "#digit_7",
        "[8]": "#digit_8",
        "[9]": "#digit_9",
        "[.]": "#dec_point"
      }
    
    }
    


    테스트 실행 시 ID가 "[AC][()]"인 화면을 [Calculator Main Screen]로 식별할 수 있습니다.
    예를 들어 현재 화면이 [Calculator Main Screen] 임을 확인할 수 있습니다.

    it.screenIs("[Calculator Main Screen]")
    


    계산기테스트



    다음은 Screen Nickname 파일이 있거나 없는 계산기 테스트 코드입니다. Screen Nickname 파일이 없는 경우에는 resource-id와 같은 하위 식별자를 사용해야 합니다. 반면 Screen Nickname 파일이 있는 경우에는 추상적인 Screen Nickname/Selector Nickname을 사용할 수 있습니다.

    package calculator
    
    import org.junit.jupiter.api.Test
    import shirates.core.driver.commandextension.*
    import shirates.core.testcode.UITest
    
    class CalculatorTest : UITest() {
    
        @Test
        @Order(10)
        fun withoutNickname() {
    
            scenario {
                case(1) {
                    condition {
                        it.tapAppIcon("Calculator")
                    }.expectation {
                        it.exist("#clr")
                        it.exist("#parens")
                    }
                }
                case(2) {
                    action {
                        it.tap("#clr")
                    }.expectation {
                        it.select("#formula")
                            .textIsEmpty()
                        it.select("#result_preview")
                            .textIsEmpty()
                    }
                }
                case(3) {
                    action {
                        it.tap("#digit_1")
                    }.expectation {
                        it.select("#formula")
                            .textIs("1")
                        it.select("#result_preview")
                            .textIsEmpty()
                    }
                }
                case(4) {
                    action {
                        it.tap("#op_add")
                    }.expectation {
                        it.select("#formula")
                            .textIs("1+")
                        it.select("#result_preview")
                            .textIsEmpty()
                    }
                }
                case(5) {
                    action {
                        it.tap("#digit_2")
                    }.expectation {
                        it.select("#formula")
                            .textIs("1+2")
                        it.select("#result_preview")
                            .textIs("3")
                    }
                }
                case(6) {
                    action {
                        it.tap("#eq")
                    }.expectation {
                        it.select("#result_final")
                            .textIs("3")
                    }
                }
            }
        }
    
        @Test
        @Order(20)
        fun withNickname() {
    
            scenario {
                case(1) {
                    condition {
                        it.tapAppIcon("Calculator")
                    }.expectation {
                        it.screenIs("[Calculator Main Screen]")
                    }
                }
                case(2) {
                    action {
                        it.tap("[AC]")
                    }.expectation {
                        it.select("[formula]")
                            .textIsEmpty()
                        it.select("[result preview]")
                            .textIsEmpty()
                    }
                }
                case(3) {
                    action {
                        it.tap("[1]")
                    }.expectation {
                        it.select("[formula]")
                            .textIs("1")
                        it.select("[result preview]")
                            .textIsEmpty()
                    }
                }
                case(4) {
                    action {
                        it.tap("[+]")
                    }.expectation {
                        it.select("[formula]")
                            .textIs("1+")
                        it.select("[result preview]")
                            .textIsEmpty()
                    }
                }
                case(5) {
                    action {
                        it.tap("[2]")
                    }.expectation {
                        it.select("[formula]")
                            .textIs("1+2")
                        it.select("[result preview]")
                            .textIs("3")
                    }
                }
                case(6) {
                    action {
                        it.tap("[=]")
                    }.expectation {
                        it.select("[result final]")
                            .textIs("3")
                    }
                }
            }
        }
    }
    


    검사 결과



    스크린 닉네임 없이 스크린 닉네임으로 보고 비교해 보세요. 화면 닉네임이 이해하기 더 쉽다는 것을 알 수 있습니다.

    _리포트(단순).html





    계산기[email protected]






    결론



    Shirates에서는 Screen Nickname을 JSON 파일로 정의할 수 있습니다. Screen Nickname은 테스트 코드를 읽기 쉽고 생산적으로 만듭니다.

    좋은 웹페이지 즐겨찾기