文章目錄
- 一、Appium常用元素定位工具
- 1、U IAutomator View Android SDK 自帶的定位工具
- 2、Appium Desktop Inspector
- 3、Weditor
- 安裝:
- Weditor工具的使用
- 4、uiautodev
- 通過定位工具獲取app頁面元素有哪些屬性
- 二、app 元素定位方法
一、Appium常用元素定位工具
1、U IAutomator View Android SDK 自帶的定位工具
- 工具所在的位置 Android SDK安裝路徑/tools/bin
- 雙擊 uiautomatorviewer.bat 文件打開即可:
2、Appium Desktop Inspector
Appium Desktop Inspector 是 appium server工具自帶的定位工具
- 下載:
前往 Appium Inspector 的官方 GitHub 發布頁面 ,根據你的操作系統(Windows、macOS 或 Linux)下載對應的安裝包。 - 安裝:
Windows:下載后得到 .exe 文件,雙擊運行安裝程序,按照提示完成安裝。
macOS:下載 .dmg 文件,打開后將 Appium Inspector 圖標拖到 “應用程序” 文件夾。
Linux:如果下載的是.deb 或.rpm 包,可使用相應的包管理器(如dpkg 或rpm )進行安裝。 - 啟動與配置
- 啟動 Appium 服務:在命令行輸入appium ,啟動 Appium 服務器,它會開始監聽默認端口 4723(可通過參數修改)。
- 啟動 Appium Inspector:打開安裝好的 Appium Inspector 應用程序。在啟動會話前,需要配置相關參數,包括:
- Remote Host:通常為127.0.0.1 (如果 Appium 服務器在本地運行)。
- Remote Port:默認是 4723,與 Appium 服務監聽端口一致。
- Desired Capabilities:根據要測試的應用和設備情況,填寫相關能力參數,如platformName (指定平臺為Android 或iOS )、platformVersion (設備系統版本)、deviceName (設備名稱或模擬器名稱)、appPackage (安卓應用包名)、appActivity (安卓應用啟動 Activity)等 。
完成以上步驟后,點擊 “啟動會話”,Appium Inspector 就能連接到 Appium 服務器,進行 App 的 UI 元素檢查和測試了。
3、Weditor
Uiautomator2 Python第三方庫 appUI自動化測試框架
安裝:
- 命令01: dos命令窗口 ----- pip install Uiautomator2
- 命令02:dos命令窗口 ----- python -m uiautomator2 init
- 命令03: dos命令窗口 ----- pip install weditor
- 確認工具是否安裝成功:weditor --help
Weditor工具的使用
- 1、啟動weditor工具
dos命令窗口-----命令:weditor - 2、選擇操作系統,填寫設置設備名稱,點擊連接
- 3、開始定位元素,獲取元素信息
- 4、退出工具 ctrl c
4、uiautodev
uiautodev 官方文檔
- 安裝環境:Python 3.8+
- 安裝命令:
pip3 install -U uiautodev
通過定位工具獲取app頁面元素有哪些屬性
- 1、 resourceid
- 2、class 屬性 /classname 元素標簽名
- 3、text 文本內容
- 4、description 屬性(content-desc)
- 5、元素定位方式 ( weditor 提供 xpath 定位語句)
- 6、appPackage
- 7、appActivity (weditor)
二、app 元素定位方法
1、元素定位方式一: 基于 text 屬性可以用 AppiumBy.ANDROID_UIAUTOMATOR(Android 專用); AppiumBy.IOS_PREDICATE(iOS 專用)
- 這種定位方式利用系統自帶框架(Uiautomator1/Uiautomator2)實現元素定位,基于java 代碼編寫
- 通過這些框架實現元素定位==實質就是調用這些框架里面的方法(UiSelector 類實現元素定位)
UiSelector - Android 中文版 - API 參考文檔 (apiref.com)
2、元素定位方式二:通過元素的類名進行定位,AppiumBy.CLASS_NAME
3、元素定位方式三: resourceId 屬性定位元素,AppiumBy.ID
4、元素定位方式四:多個屬性組合定位 new UiSelector().方法1().方法2().方法3();UiSelector類里面的方法,如果參數是字符串類型,必須是雙引號
5、元素定位方式五:基于 content‐desc/description 屬性定位:AppiumBy.ACCESSIBILITY_ID
6、元素定位方式六:選擇 xpath 定位 等同于 web 自動化測試 xpath 定位的方法一致
# -*- coding=utf-8 -*-
from time import sleep
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec# 設置操作終端的配置參數
desired_caps = dict(platformName='Android', # 指定操作系統platformVersion='12',# 指定操作系統版本automationName='Uiautomator2',# 默認框架deviceName='127.0.0.1:62001',# 指定設備名稱appPackage='com.tal.kaoyan',# 被操作的應用程序包名appActivity='com.tal.kaoyan.ui.activity.SplashActivity',# 啟動頁面noReset='false',# true--不重置 false--重置app='F:\Pycharm\AppAuto\kaoyan_v4.5.3.apk' # apk文件所在路徑
)
# 發送命令給 appium server
driver = webdriver.Remote('http://127.0.0.1:4723', options=UiAutomator2Options().load_capabilities(desired_caps))
#-------------首次啟動后彈窗處理----------------
try:# 等待用戶協議彈窗元素出現(最多5秒)user_protocal = WebDriverWait(driver, 5).until(Ec.presence_of_element_located((AppiumBy.ID, 'com.tal.kaoyan:id/tip_commit')))user_protocal.click() # 關閉彈窗print("用戶協議彈窗已關閉")
except Exception:print("未發現用戶協議彈窗,繼續執行")pass # 未出現彈窗,繼續執行后續代碼
try:# 等待權限彈窗元素出現(最多5秒)confirm_permission = WebDriverWait(driver, 5).until(Ec.presence_of_element_located((AppiumBy.ID, 'com.tal.kaoyan:id/tv_ok')))confirm_permission.click() # 關閉彈窗print("權限彈窗已關閉")
except Exception:print("未發現用戶協議彈窗,繼續執行")pass # 未出現彈窗,繼續執行后續代碼
#-------------登錄----------------
# 1、元素定位方式一: 基于 text 屬性可以用 AppiumBy.ANDROID_UIAUTOMATOR(Android 專用);AppiumBy.IOS_PREDICATE(iOS 專用)
phone_input = WebDriverWait(driver, 5).until(Ec.presence_of_element_located((AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.tal.kaoyan:id/kylogin_phone_input_phonelayout")')))
# 點擊手機號輸入框,保證輸入框是可輸入狀態
phone_input.click()
# 通過模擬人為的點擊響應的數字按鈕,對應到手機鍵盤的字母/數字鍵從而完成文本的輸入,以下是輸入手機號 18710846693
driver.press_keycode(8)
driver.press_keycode(15)
driver.press_keycode(14)
driver.press_keycode(8)
driver.press_keycode(7)
driver.press_keycode(15)
driver.press_keycode(11)
driver.press_keycode(13)
driver.press_keycode(13)
driver.press_keycode(16)
driver.press_keycode(10)# 2、元素定位方式二:通過元素的類名進行定位,AppiumBy.CLASS_NAME
checkbox_btn = driver.find_element(AppiumBy.CLASS_NAME, 'android.widget.CheckBox')
checkbox_btn.click()# 3、元素定位方式三: resourceId 屬性定位元素,AppiumBy.ID
verify_code_btn = driver.find_element(AppiumBy.ID, "com.tal.kaoyan:id/kylogin_phone_input_codeget")
verify_code_btn.click()
# AppiumBy.ANDROID_UIAUTOMATOR支持多個屬性組合定位:className resourceId
# 等待用戶輸入
code_value = input("請輸入手機驗證碼")
# 4、元素定位方式四:多個屬性組合定位 new UiSelector().方法1().方法2().方法3();UiSelector類里面的方法,如果參數是字符串類型,必須是雙引號
code_input = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().text("請輸入驗證碼").resourceId("com.tal.kaoyan:id/kylogin_phone_input_code") ')
code_input.send_keys(code_value)
# 5、元素定位方式五:基于 content‐desc/description 屬性定位:AppiumBy.ACCESSIBILITY_ID
# 6、元素定位方式六:選擇 xpath 定位 等同于 web 自動化測試xpath定位的方法一致
login_btn = driver.find_element(AppiumBy.XPATH, '//*[@resource-id="com.tal.kaoyan:id/loginCodeLoginBtn"]')
login_btn.click()
sleep(5)