appium元素定位

餘生沒有餘生發表於2022-12-17

本章主要介紹幾種原生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/ ,請勿轉載

相關文章