uiautomator方法定位原生app元素
appium在android端是調用其底層的UIAutomator2自動化測試架構去驅動自動化,在定位元素的時候,可以借助UIAutomator2的文法來實作定位。在代碼實作上提供的API是find_element_by_android_uiautomator;利用android_uiautomator進行定位,文法必須屬性值是雙引号
- 根據text定位
find_element_by_android_uiautomator(‘text(“值”)’)
find_element_by_android_uiautomator(‘newUiSelector().text(“值”)’) # 'newUiSelector()'推薦使用
1 # 通過text定位
2 driver.find_element_by_android_uiautomator('text("5")').click()
3 # 推薦使用正規方法
4 driver.find_element_by_android_uiautomator('new UiSelector().text("5")').click()
text定位相關函數:
textContains:模糊比對文本
textStartsWith:以某個文本開頭來比對
textMatches:正則比對
# text定位相關函數:
# textContains:模糊比對文本
driver.find_element_by_android_uiautomator('new UiSelector().textContains("...")')
# textStartsWith:以某個文本開頭來比對
driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("...")')
# textMatches:正則比對
driver.find_element_by_android_uiautomator('new UiSelector().textMatches("...")')
- 根據resourceId定位
find_element_by_android_uiautomator(‘resourceId(“值”)’)
find_element_by_android_uiautomator(‘newUiSelector().resourceId(“值”)’)
1 # 根據resourceId定位:
2 driver.find_element_by_android_uiautomator('new UiSelector().resourceId("...")').click()
- 根據className定位:關鍵字className
1 # 根據className定位:關鍵字className
2 driver.find_element_by_android_uiautomator('new UiSelector().className("...")').click()
- 根據contenet-desc定位:關鍵字description
1 # 根據contenet-des定位:關鍵字description
2 driver.find_element_by_android_uiautomator('new UiSelector().description("...")').click()
- 組合定位(類名和文本)
newUiSelector().className(“類名”).text(“值”)其它組合定位方式類推
1 # 組合定位(類名和文本):
2 driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.Button").text("7")').click()
3 driver.find_element_by_android_uiautomator('new UiSelector().text("8").className("android.widget.Button")').click()
- 根據元素關系定位
-
子孫元素定位
使用條件:子元素屬性不定,不唯一,隻能通過父元素來定位
newUiSelector().resourceId(“值”).childSelector(className(“值”).instance(數字))
其中childSelector可以傳入resourceId、description等方法
instance表示比對的結果所有元素裡面的第幾個元素,從0開始計數
1 # 後代元素定位
2 driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.sky.jisuanji:id/tablelayout").childSelector(className("android.widget.Button").instance(3))').click()
- 兄弟元素定位
通過子元素找到父元素,然後通過父元素再去找兄弟元素
newUiSelector().resourceId(“值”).fromParent(text(“值”))
fromParent()表示從元素的父元素下查找
1 # 兄弟元素定位
2 driver.find_element_by_android_uiautomator('new UiSelector().text("7").fromParent(text("9"))').click()