和Web端一樣,APP端也是可以通過元素進行定位的。有過Web端的七種元素定位的實戰經驗,APP端的元素定位也容易理解。Web端元素定位點擊查看。
APP端的元素定位,可以用uiautomator抓取頁面元素。下面介紹一下APP的幾種元素定位方式:
1、id定位
APP裏面的元素resource-id相當於Web端元素id。
find_element_by_id(‘android:id/button2’)
2、name定位
APP裏面的元素text相當於Web端元素name。
find_element_by_name(‘請輸入用戶名’)
3、class定位
APP裏面的元素class相當於Web端元素class。
find_element_by_class_name(‘android.widget.EditText’)
4、相對定位
相對定位是先找到該元素有對應屬性的父元素節點,然後基於父元素進行元素定位。
例:先通過resource-id='com.tal.kaoyan:id/activity_register_parentlayout’定位到ImageView的父元素LinearLayout,然後再通過resource-id=‘com.tal.kaoyan:id/activity_register_userheader’定位到ImageView。
5、Xpath定位
APP的Xpath定位方式和Web端的一毛一樣。
find_element_by_xpath(’//android.widget.EditText[@text=“請輸入用戶名”]’)
6、list定位
List定位首先是使用find_elements_by_XX獲取一組相同的class屬性的元素,然後使用數組下標來區分標記不同元素進行相關操作。
images=driver.find_elements_by_id(‘com.tal.kaoyan:id/item_image’)
#選擇第10張圖作爲上傳對象
images[9].click()
7、UIAutomator元素定位
UIAutomator元素定位是 Android 系統原生支持的定位方式,雖然與 xpath 類似,但比它更加好用,且支持元素全部屬性定位。定位原理是通過android自帶的android uiautomator的類庫去查找元素。 Appium元素定位方法其實也是基於Uiautomator來進行封裝的。類似於Web端的CSS定位。
7.1、id定位
id定位是根據元素的resource-id屬性來進行定位,使用 UiSelector().resourceId()方法即可。
find_element_by_android_uiautomator(‘new UiSelector().resourceId(“com.tal.kaoyan:id/login_password_edittext”)’)
7.2、text定位
text定位就是根據元素的text屬性值來進行定位,new UiSelector()
find_element_by_android_uiautomator(‘new UiSelector().text(“請輸入用戶名”)’)
7.3、text定位class name定位
find_element_by_android_uiautomator(‘new UiSelector().className(“android.widget.EditText”)’)