Locators in Appium

Dahun Yoo·2023년 3월 13일
1

Appium with python

목록 보기
7/13

Appium에서 사용할 수 있는 Locator의 종류에 대해 기재해봅니다.


AppiumBy

일단 Appium에서 사용할 수 있는 로케이터 클래스는, 이전까지 사용했던 MobileBy 라는 것이 있을텐데, 이녀석인 현재 Deprecated 된 상태입니다. (appium-python-client v2.8.1 기준)

그래서 Deprecated된 MobileBy 대신에 AppiumBy를 쓰면 됩니다.

그런데 결국에는 By를 상속받고 있기 때문에, 우리가 셀레니움을 사용하면서 자주 사용했던 그러한 로케이터들을 모바일에서도 사용할 수 있습니다. 단 OS별로 사용할 수 있는 값들이 조금씩 다릅니다.

Appium에서는 아래 7개의 로케이터들을 지원한다고 보면 됩니다.

AndroidiOS
AppiumBy.IDid, resource-idid, name
AppiumBy.ACCESSIBILITY_IDcontent-descaccessibility-id
AppiumBy.CLASS_NAMEclassclass
AppiumBy.XPATH
AppiumBy.ANDROID_UIAUTOMATORUiSelector() 를 이용한 텍스트 전달x
AppiumBy.IOS_PREDICATEx-ios predicate string
AppiumBy.IOS_CLASS_CHAINx-ios class chain

ID

엘리먼트를 찾는데에 가장 빠른 방법이다. ID값은 해당 페이지 내에서 고유한 값입니다. (중복되는 값은 없음)

Accessibility ID

appium에서 ID 다음으로 빠른 값이라고 할 수 있습니다. iOS에서는 고유하게 accessibility id라는 값을 소스코드 내에서 작성할 수 있고, 안드로이드는 content-desc 라는 값으로 지정할 수 있습니다.

Class name

일반적으로 사용할 수 있는데 그다지 권장하지는 않습니다. 클래스의 경우에는 하나의 페이지 내에 중복으로 존재할 수도 있기 때문에, 제대로 못찾을 확률이 크다. 이것은 find_elements() 를 이용할 때 효과적일 것이다.

XPath

앱의 XML 구조를 바탕으로 appium inspector가 해석해서 만들어낸다. appium inspector에서는 퍼포먼스 이슈로 인해 가능하면 사용하지 말 것을 직접적으로 권장하고 있습니다.

Android UI Automator (UI Automator2)

안드로이드 전용 식별자. 자바 코드를 직접 앱피움 서버로 날려서 실행하는 것입니다.

AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().~~~"

로 이용합니다.

index

AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().index(4)"

text

AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().text(~~~)"

content-desc

AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().description(~~~)"

iOS Predicate, iOS Class Chain

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

profile
QA Engineer

0개의 댓글