03 APP 自动化-定位元素工具元素定位
文章目录
- 一、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)