天天看點

App自動化測試|原生App元素定位方法(二)

作者:測試者穆勒
App自動化測試|原生App元素定位方法(二)

uiautomator方法定位原生app元素

appium在android端是調用其底層的UIAutomator2自動化測試架構去驅動自動化,在定位元素的時候,可以借助UIAutomator2的文法來實作定位。在代碼實作上提供的API是find_element_by_android_uiautomator;利用android_uiautomator進行定位,文法必須屬性值是雙引号

  1. 根據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("...")')
           
  1. 根據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()
           
  1. 根據className定位:關鍵字className
1 # 根據className定位:關鍵字className
2 driver.find_element_by_android_uiautomator('new UiSelector().className("...")').click()
           
  1. 根據contenet-desc定位:關鍵字description
1 # 根據contenet-des定位:關鍵字description
2 driver.find_element_by_android_uiautomator('new UiSelector().description("...")').click()
           
  1. 組合定位(類名和文本)

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()
           
  1. 根據元素關系定位
  • 子孫元素定位

    使用條件:子元素屬性不定,不唯一,隻能通過父元素來定位

    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()           

繼續閱讀