Appium에서 사용할 수 있는 Locator의 종류에 대해 기재해봅니다.
일단 Appium에서 사용할 수 있는 로케이터 클래스는, 이전까지 사용했던 MobileBy 라는 것이 있을텐데, 이녀석인 현재 Deprecated 된 상태입니다. (appium-python-client
v2.8.1 기준)
그래서 Deprecated된 MobileBy 대신에 AppiumBy
를 쓰면 됩니다.
그런데 결국에는 By를 상속받고 있기 때문에, 우리가 셀레니움을 사용하면서 자주 사용했던 그러한 로케이터들을 모바일에서도 사용할 수 있습니다. 단 OS별로 사용할 수 있는 값들이 조금씩 다릅니다.
Appium에서는 아래 7개의 로케이터들을 지원한다고 보면 됩니다.
Android | iOS | |
---|---|---|
AppiumBy.ID | id, resource-id | id, name |
AppiumBy.ACCESSIBILITY_ID | content-desc | accessibility-id |
AppiumBy.CLASS_NAME | class | class |
AppiumBy.XPATH | ||
AppiumBy.ANDROID_UIAUTOMATOR | UiSelector() 를 이용한 텍스트 전달 | x |
AppiumBy.IOS_PREDICATE | x | -ios predicate string |
AppiumBy.IOS_CLASS_CHAIN | x | -ios class chain |
엘리먼트를 찾는데에 가장 빠른 방법이다. ID값은 해당 페이지 내에서 고유한 값입니다. (중복되는 값은 없음)
appium에서 ID 다음으로 빠른 값이라고 할 수 있습니다. iOS에서는 고유하게 accessibility id
라는 값을 소스코드 내에서 작성할 수 있고, 안드로이드는 content-desc
라는 값으로 지정할 수 있습니다.
일반적으로 사용할 수 있는데 그다지 권장하지는 않습니다. 클래스의 경우에는 하나의 페이지 내에 중복으로 존재할 수도 있기 때문에, 제대로 못찾을 확률이 크다. 이것은 find_elements()
를 이용할 때 효과적일 것이다.
앱의 XML 구조를 바탕으로 appium inspector가 해석해서 만들어낸다. appium inspector에서는 퍼포먼스 이슈로 인해 가능하면 사용하지 말 것을 직접적으로 권장하고 있습니다.
안드로이드 전용 식별자. 자바 코드를 직접 앱피움 서버로 날려서 실행하는 것입니다.
AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().~~~"
로 이용합니다.
AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().index(4)"
AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().text(~~~)"
AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().description(~~~)"
inspector로 아이오에스 를 확인할때 보면 -ios predicate string
이나 -ios class chain
라는 값이 나오는데, 이것을 여기에 쓸 수 있습니다.
ref.
https://appium.io/docs/en/commands/element/find-elements/
https://www.browserstack.com/guide/locators-in-appium