本章主要介紹幾種原生app定位的方法,我們可以進入npm安裝目錄下找到driver.js檔案開啟可以
看到如下幾種定位方法,我的地址是(C:\Users\username\AppData\Roaming\npm\node_modules
\appium\node_modules\appium-android-driver\lib),npm版本為8.1.2。
1.id
1)例項
import time from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy desired_cap = { "platformName": "Android", # 手機系統 "platformVersion": "11", # 手機系統版本 "deviceName": 'xxxxx', # 連線的裝置 "automationName": "UiAutomator2", # 自動化測試框架 "appPackage": "xxxxx", # app包名 "appActivity": "xxxxxx", # app的啟動頁面 "autoGrantPermissions": "true", # 預設允許app獲取相關許可權 "noReset": True # 保留登入模式 } driver = webdriver.Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_cap) driver.implicitly_wait(10) # 設定元素等待 driver.find_element(AppiumBy.ID, "tv.danmaku.bili:id/agree").click() # id定位resource-id
id的值與uiautomatorviewer中resource-id的值一致。resource-id在元素app中並不是唯一的,所以使用要視情況而定。
2.xpath
xpath可根據uiautomatorviewer中node detail的屬性和值進行定位
1)單條件定位
driver.find_element(AppiumBy.XPATH, '//*[@text="同意並繼續"]').click()
2)多條件定位
driver.find_element(AppiumBy.XPATH, '//*[@text="同意並繼續" and @resource-id="tv.danmaku.bili:id/agree"]').click()
多個條件之間用and連線
3.ANDROID_UIAUTOMATOR
1)根據文字(text)值進行定位
精準匹配
import time from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy desired_cap = { "platformName": "Android", # 手機系統 "platformVersion": "11", # 手機系統版本 "deviceName": 'xxxxx', # 連線的裝置 "automationName": "UiAutomator2", # 自動化測試框架 "appPackage": "xxxxx", # app包名 "appActivity": "xxxxxx", # app的啟動頁面 "autoGrantPermissions": "true", # 預設允許app獲取相關許可權 "noReset": True # 保留登入模式 } driver = webdriver.Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_cap) driver.implicitly_wait(10) # 設定元素等待 driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("同意並繼續")').click() # text值精準匹配
模糊匹配
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textContains("意並繼")').click() # text值模糊匹配
開頭匹配
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textStartsWith("同意")').click() # text值匹配開頭
2)根據class_name進行定位
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.TextView")').click()
class_name對應的就是class的值
3)根據resource-id進行定位
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("tv.danmaku.bili:id/agree")').click()
4)根據description進行定位
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().description("Xxxx")').click()
description對應的值就是content-desc
5)多條件定位
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.TextView").text("動畫").resourceId("tv.danmaku.bili:id/tab_title")').click() # 組合使用
多個條件判斷中用.號連線
4.ACCESSIBILITY_ID
accessibility_id對應的值為content_desc
driver.find_element(AppiumBy.ACCESSIBILITY_ID, "動畫,7之4,標籤").click()
5.class_name
這個定位強烈不推薦使用,賊垃圾,多半有重複的值,定位多數不準確
driver.find_elements(AppiumBy.CLASS_NAME, "android.widget.TextView")
class_name對應的值為class
6.h5方面的定位可參考selenium定位方法
https://www.cnblogs.com/lihongtaoya/p/16487846.html
文章來源:https://www.cnblogs.com/lihongtaoya/ ,請勿轉載