Shirates에서 상대 선택기를 사용하는 방법 - 2부 -

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

선택기 표현식



화면에서 요소를 선택하기 위해 선택자 표현식을 사용할 수 있습니다. 이것은 간단하고 강력한 표현입니다(참조).

상대 선택기



화면에서 요소를 선택한 후 상대적으로 요소 주위에 다른 요소를 가져오고 싶을 수 있습니다. 이 경우 Shirates의 상대 선택기를 사용할 수 있습니다.


상대 선택기(위젯 흐름 기반)



위젯 흐름과 함께 상대적으로 위젯을 얻을 수 있습니다.

위젯 흐름 알고리즘



위젯 흐름 알고리즘은 수직 위치(첫 번째 그룹 - 여섯 번째 그룹)로 위젯을 그룹화한 다음 각 그룹의 위젯을 왼쪽에서 오른쪽으로, 그리고 위에서 아래로 검색합니다.



첫 번째 그룹에서 위젯 흐름 순서는 (0),(1),(2)입니다.
두 번째 그룹에서 위젯 흐름 순서는 (3),(4),(5),(6),(7)입니다.
세 번째 그룹에서 위젯 흐름 순서는 (8),(9)입니다.
네 번째 그룹에서 위젯 흐름 순서는 (10),(11)입니다.
다섯 번째 그룹에서 위젯 흐름 순서는 (12)입니다.
6번째 그룹에서 위젯 흐름 순서는 (13)이다.

그룹화 패턴





상대 선택기(위젯 흐름 기반)




상대 선택기
별명
설명


:흐름
-
위젯 흐름의 위젯

:flowLabel
:상표
위젯 흐름의 레이블

:flowInput
:입력
위젯 흐름에 입력

:flowImage
:영상
위젯 흐름의 이미지

:flowButton
:단추
위젯 흐름의 버튼

:flowSwitch
:스위치
위젯 흐름 전환

:innerFlow
:안의
위젯 흐름의 내부 위젯

:innerLabel
-
위젯 흐름의 내부 레이블

:내부 입력
-
위젯 흐름의 내부 입력

:내부 이미지
-
위젯 흐름의 내부 이미지

:innerButton
-
위젯 흐름의 내부 버튼

:innerSwitch
-
위젯 흐름의 내부 스위치

:vflow
-
수직 위젯 흐름의 위젯

:innerVflow
:innerV
수직 위젯 흐름의 내부 위젯

:innerVlabel
-
수직 위젯 흐름의 내부 레이블

:innerVinput
-
수직 위젯 흐름의 내부 입력

:innerVimage
-
수직 위젯 흐름의 내부 이미지

:innerV버튼
-
수직 위젯 흐름의 내부 버튼

:innerVswitch
-
수직 위젯 흐름의 내부 스위치


상대 선택기 예




예시
설명

<text1>:input텍스트가 "text1"인 첫 번째 요소를 선택한 다음 위젯 흐름에서 첫 번째 입력을 선택합니다.
<.Class1>:flow(2)유형이 Class1인 첫 번째 요소를 선택한 다음 위젯 흐름에서 두 번째 위젯을 선택합니다.


재료



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

SelectWithWidgetFlowTest




import org.junit.jupiter.api.Order
import org.junit.jupiter.api.Test
import shirates.core.driver.commandextension.classIs
import shirates.core.driver.commandextension.restartApp
import shirates.core.driver.commandextension.select
import shirates.core.driver.commandextension.textIs
import shirates.core.testcode.UITest

class SelectWithWidgetFlowTest : UITest() {

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

        scenario {
            case(1) {
                condition {
                    it.restartApp()
                }.expectation {
                    it.select("<Settings>:flow")
                        .classIs("android.widget.ImageButton")
                    it.select("<Settings>:flow(2)")
                        .textIs("Search settings")
                    it.select("<Settings>:flow(3)")
                        .classIs("android.widget.ImageView")
                    it.select("<Settings>:flow(4)")
                        .textIs("Network & internet")
                    it.select("<Settings>:flow(5)")
                        .textIs("Mobile, Wi‑Fi, hotspot")
                }
            }
            case(2) {
                expectation {
                    it.select("<Settings>") {
                        // Select relatively from <Settings>
                        select(":flow").classIs("android.widget.ImageButton")
                        select(":flow(2)").textIs("Search settings")
                        select(":flow(3)").classIs("android.widget.ImageView")
                        select(":flow(4)").textIs("Network & internet")
                        select(":flow(5)").textIs("Mobile, Wi‑Fi, hotspot")
                    }
                }
            }
        }
    }

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

        scenario {
            case(1) {
                condition {
                    it.restartApp()
                }.expectation {
                    it.select("<Settings>") {
                        // Select relatively from <Settings>
                        select(":label").textIs("Search settings")
                        select(":label(2)").textIs("Network & internet")
                        select(":label(3)").textIs("Mobile, Wi‑Fi, hotspot")
                    }
                }
            }
            case(2) {
                expectation {
                    it.select("<Network & internet>") {
                        // Select relatively from <Network & internet>
                        select(":image").classIs("android.widget.ImageView")
                        select(":label").textIs("Mobile, Wi‑Fi, hotspot")
                    }
                }
            }
        }
    }

}


selectWithWidgetFlow/케이스(1),케이스(2)





selectWithWidgetFlow2/케이스(1)





selectWithWidgetFlow2/케이스(2)





검사 결과



HTML 보고서






자세한 내용은



참조Relative selector(Widget flow based)


결론



화면에서 요소를 선택하면 Shirates의 상대 선택기를 사용하여 상대적으로 요소 주위에 다른 요소를 가져올 수 있습니다.

위젯 흐름과 함께 상대적으로 위젯(입력, 레이블, 이미지, 버튼, 스위치)을 얻을 수 있습니다.

좋은 웹페이지 즐겨찾기