Shirates에서 선택자 표현식을 사용하는 방법

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

선택기 표현식



Shirates Selector 표현식은 화면 요소를 필터링하는 표현식입니다.

select 함수는 선택자 표현식을 수락하고 구문 분석하며 요소를 검색 및 필터링하고 결과 요소를 반환합니다.

선택기 표현식은 하나 이상의 필터 표현식으로 구성됩니다.



필터 표현식



Shirates Filter 표현식은 화면 요소를 필터링하기 위한 조건을 기술하는 표현식입니다.


필터
공식적인
약어
안드로이드 속성
iOS 속성


텍스트
텍스트=텍스트1
텍스트 1
텍스트
상표

textStartsWith
textStartsWith=텍스트1
텍스트 1*
텍스트
상표

텍스트 포함
textContains=텍스트1
*텍스트 1*
텍스트
상표

textEndsWith
textEndsWith=텍스트1
*텍스트 1
텍스트
상표

textMatches
textMatches=^텍스트$
해당 없음
텍스트
상표

정확한
리터럴=리터럴1
'리터럴1'
텍스트
상표

ID
id=id1
#id1
리소스 ID
이름

입장
액세스=액세스1
@액세스1
내용 설명
이름

accessStartsWith
accessStartsWith=액세스1
@액세스1*
내용 설명
이름

액세스 포함
accessContains=액세스1
@*액세스1*
내용 설명
이름

accessEndsWith
accessEndsWith=액세스1
@*액세스1
내용 설명
이름

accessMatches
accessMatches=^액세스1$
해당 없음
내용 설명
이름


값=값1
해당 없음
텍스트


valueStartsWith
valueStartsWith=값1
해당 없음
텍스트


값 포함
값포함=값1
해당 없음
텍스트


valueEndsWith
valueEndsWith=값1
해당 없음
텍스트


값 일치
valueMatches=^value1$
해당 없음
텍스트


수업
클래스=클래스1
.class1
수업
유형

집중 가능
집중 가능=참
해당 없음
집중 가능
해당 없음

스크롤 가능
스크롤 가능=참
해당 없음
스크롤 가능
해당 없음

보이는
보이는=참
해당 없음
해당 없음
보이는

xpath
xpath=//*[@text='텍스트1']
해당 없음
(임의)
(임의)

위치
위치=2
[2]
해당 없음
해당 없음

유형 무시
ignoreTypes=클래스1,클래스2
해당 없음
수업
유형

영상
이미지=image1.png
이미지1.png
해당 없음
해당 없음


자세한 내용은



참조Selector expression

재료



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

선택기테스트2




import org.junit.jupiter.api.Order
import org.junit.jupiter.api.Test
import shirates.core.driver.branchextension.emulator
import shirates.core.driver.branchextension.realDevice
import shirates.core.driver.commandextension.*
import shirates.core.testcode.UITest

class SelectTest2 : UITest() {

    @Test
    @Order(10)
    fun selectByText() {

        scenario {
            case(1) {
                condition {
                    it.restartApp()
                }.action {
                    it.select("Network & internet")
                }.expectation {
                    it.textIs("Network & internet")
                }
            }
            case(2) {
                action {
                    it.select("Network &*")
                }.expectation {
                    it.textIs("Network & internet")
                }
            }
            case(3) {
                action {
                    it.select("*internet")
                }.expectation {
                    it.textIs("Network & internet")
                }
            }
            case(4) {
                action {
                    it.select("textMatches=^Network & internet$")
                }.expectation {
                    it.textIs("Network & internet")
                }
            }
            case(5) {
                action {
                    it.selectWithScrollDown("About phone||About emulated device")
                }.expectation {
                    realDevice {
                        it.textIs("About phone")
                    }.emulator {
                        it.textIs("About emulated device")
                    }
                }
            }
        }
    }

    @Test
    @Order(20)
    fun selectById() {

        scenario {
            case(1) {
                condition {
                    it.restartApp()
                }.action {
                    it.select("#search_action_bar_title")
                }.expectation {
                    it.textIs("Search settings")
                }
            }
        }
    }

    @Test
    @Order(30)
    fun selectByAccessibility() {

        scenario {
            case(1) {
                condition {
                    it.restartApp()
                        .tap("Network & internet")
                }.action {
                    it.select("@Network & internet")
                }.expectation {
                    it.idIs("collapsing_toolbar")
                }
            }
        }
    }

    @Test
    @Order(40)
    fun selectByClass() {

        scenario {
            case(1) {
                condition {
                    it.restartApp()
                }.action {
                    it.select(".android.widget.ImageButton")
                }.expectation {
                    it.classIs("android.widget.ImageButton")
                }
            }
        }
    }

    @Test
    @Order(50)
    fun selectByXpath() {

        scenario {
            case(1) {
                condition {
                    it.restartApp()
                }.action {
                    it.select("xpath=//*[@text='Search settings']")
                }.expectation {
                    it.textIs("Search settings")
                }
            }
        }
    }

    @Test
    @Order(60)
    fun selectByPos() {

        scenario {
            case(1) {
                condition {
                    it.restartApp()
                        .tap("Battery")
                }.action {
                    it.select("*Battery*&&[1]")
                }.expectation {
                    it.textIs("Battery Usage")
                }
            }
            case(2) {
                action {
                    it.select("*Battery*&&[2]")
                }.expectation {
                    it.textIs("Battery Saver")
                }
            }
            case(3) {
                action {
                    it.select("*Battery*&&[3]")
                }.expectation {
                    it.textIs("Battery percentage")
                }
            }
        }
    }

}


검사 결과








결론



Shirates Selector 표현식은 화면에서 요소를 검색하기 위한 간단하면서도 강력한 표현식이며 XPath만큼 유연하지만 XPath보다 훨씬 쉽습니다.

좋은 웹페이지 즐겨찾기