App测试自动化工具UIAutomator2的使用

UIAutomator2是一个安卓App测试的自动化工具,它通过模拟点击实现对App的功能测试。

除了UIAutomator2外,还有Appium、AirTest等App自动测试框架。

自动化框架支持平台语言特点
AppiumAndroid、iOS、WindowsJava、Python、Ruby等跨平台,支持多种编程语言,是APP UI自动化领域的标杆产品
AirTestAndroid、iOS、WindowsPython基于图像识别和UI控件检索技术,‌适用于游戏和应用测试,上手简单,‌通过图像识别技术定位UI元素,‌无需嵌入代码即可进行自动化测试
UIAutomator2AndroidPythonAPI设计简洁易用,适用于较简单的原生Android应用,‌支持跨app操作,‌但无法使用录制功能,适用于对性能要求不高、‌操作简单的测试场景

本文是App测试自动化系列工具之UIAutomator2的使用。


1. 安装python

2. 环境准备

2.1. 配置adb

把adb的路径配置到环境变量path中即可。

官网下载adb,并将配置adb.exe所在文件夹配置到环境变量path中即可。

如果已经通过Android Studio安装过Android SDK,在Android Studio按下ctrl + alt + s,依次打开Languages & Frameworks -> Android SDK -> SDK Tool,确认是否安装Android SDK Platform-Tools,若没安装就安装。安装后在当前页面查看Android SDK Location配置,然后打开Android SDK Location配置的路径,找到platform-tools文件夹,该文件夹下有adb.exe,将platform-tools文件夹配置到环境变量path中即可。

2.2. 安装weditor(也可以用后文的uiautodev替代)

weditor是一款基于浏览器的UI查看器,用于查看UI元素定位。

pip install weditor

查看是否安装成功

weditor --help

注:运行weditor --help时,可能出现ModuleNotFoundError: No module named 'pkg_resources'报错,这是因为缺失setuptools,解决办法是执行pip install setuptools安装setuptools。

2.3. 连接设备
  • 使用真机调试:手机打开开发者模式,通过USB或Wifi连接到电脑;

  • 使用模拟器调试:打开模拟器模拟设备即可。

2.4. 安装uiautomator2
pip install uiautomator2

3. 使用weditor定位元素

运行weditor

python -m weditor

weditor

启动后会打开浏览器窗口,当设备连接电脑后,点击"Connect"连接设备,点击"Dump Hierarchy"同步设备当前页面到网页,点击左侧同步的页面即可获取xpath、resourceId、text等信息。

4. 示例代码

import time

import uiautomator2 as u2

# usb连接。可在cmd窗口输入adb devices获取设备号
# device = u2.connect("emulator-5554")
# 只有一个设备时,可以省略参数
device = u2.connect()
print("设备信息:", device.info)
print("已安装应用:", device.app_list())
print("运行中的应用:", device.app_list_running())
print("当前界面的app:", device.app_current())

appPkgName = "tv.danmaku.bili"

# 打开应用
# device.app_start(appPkgName)
# 启动应用前停止应用
device.app_start(appPkgName, stop=True)
# 根据resourceId定位元素,并等待10s待其出现
device(resourceId="tv.danmaku.bili:id/count_down").wait(timeout=10)
# 开屏如果存在跳过按钮就点击
if device(resourceId="tv.danmaku.bili:id/count_down").exists:
    device(resourceId="tv.danmaku.bili:id/count_down").click()
    print("click skip button by resourceId")

# 根据元素内容单击
device(text="热门").click()
device(text="推荐").click()
# 根据坐标点击
# device.click(100,200)
time.sleep(1)

adTag = '//*[@resource-id="tv.danmaku.bili:id/ad_tint_frame"]/android.widget.ImageView[1]'
adFoundCnt = 0
while adFoundCnt < 10:
    adFoundCnt += 1
    # 屏幕上滑,滑动距离默认为屏幕宽度的90%。direction取值有"left", "right", "up", "bottom"四种
    device.swipe_ext("up")
    time.sleep(3)
    # 屏幕上滑,滑动距离为屏幕宽度的30%(范围为0-1)
    device.swipe_ext("up", scale=0.3)
    time.sleep(2)
    # 根据xpath长按
    if device.xpath(adTag).exists:
        device.xpath(adTag).long_click()
        # 字符串匹配
        device(textContains="感兴").click()
        break


def fillAndSearch(text):
    # 也可以用device.xpath('//*[@resource-id="tv.danmaku.bili:id/search_plate"]').set_text(text)完成输入
    # 让光标定位到输入框
    device(resourceId="tv.danmaku.bili:id/search_plate").click()
    # 清楚输入框
    device.clear_text()
    # 输入内容
    device.send_keys(text)
    device(resourceId="tv.danmaku.bili:id/action_search").click()


time.sleep(2)
if device(resourceId="tv.danmaku.bili:id/search_image").exists:
    device(resourceId="tv.danmaku.bili:id/search_image").click()
    fillAndSearch("uiautomator2使用")

elif device(resourceId="tv.danmaku.bili:id/search_icon").exists:
    device(resourceId="tv.danmaku.bili:id/search_icon").click()
    fillAndSearch("uiautomator2使用")

# 点击系统级的返回按钮
device.press("back")
# 关闭app
device.app_stop(appPkgName)

5. uiautomator2定位元素方式及用法

名称描述
texttext是指定文本的元素
textContainstext中包含有指定文本的元素
textMatchestext符合指定正则的元素
textStartsWithtext以指定文本开头的元素
classNameclassName是指定类名的元素
classNameMatchesclassName类名符合指定正则的元素
descriptiondescription是指定文本的元素
descriptionContainsdescription中包含有指定文本的元素
descriptionMatchesdescription符合指定正则的元素
descriptionStartsWithdescription以指定文本开头的元素
checkable可检查的元素,参数为True,False
checked已选中的元素,通常用于复选框,参数为True,False
clickable可点击的元素,参数为True,False
longClickable可长按的元素,参数为True,False
scrollable可滚动的元素,参数为True,False
enabled已激活的元素,参数为True,False
focusable可聚焦的元素,参数为True,False
focused获得了焦点的元素,参数为True,False
selected当前选中的元素,参数为True,False
packageNamepackageName为指定包名的元素
packageNameMatchespackageName为符合正则的元素
resourceIdresourceId为指定内容的元素
resourceIdMatchesresourceId为符合指定正则的元素

6. uiautodev的安装与使用

uiautodev是weditor作者开发的另一个UI元素定位工具,界面更加友好。weditor已经不再维护了。

6.1. 安装
pip install uiautodev

pip install uiautodev -i https://pypi.doubanio.com/simple
6.2. 查看是否安装成功
uiautodev --help

uiauto.dev --help
6.3. 运行
uiautodev

uiauto.dev

python -m uiautodev
6.4. 使用

uiautodev启动后会打开浏览器窗口。

  1. 在网页选择对应的设备;

  2. 点击刷新可同步设备当前页面到网页;

  3. 点击左侧同步的页面即可获取xpath、resourceId、text等信息,右侧还可查看层级信息。

参考文章:

QUICK REFENRECE GUIDE

软件测试技术分享丨uiautomator2详细使用方法

  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值