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

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

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

自动化框架 支持平台 语言 特点
Appium Android、iOS、Windows Java、Python、Ruby等 跨平台,支持多种编程语言,是APP UI自动化领域的标杆产品
AirTest Android、iOS、Windows Python 基于图像识别和UI控件检索技术,‌适用于游戏和应用测试,上手简单,‌通过图像识别技术定位UI元素,‌无需嵌入代码即可进行自动化测试
UIAutomator2 Android Python API设计简洁易用,适用于较简单的原生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定位元素方式及用法

名称 描述
text text是指定文本的元素
textContains text中包含有指定文本的元素
textMatches text符合指定正则的元素
textStartsWith text以指定文本开头的元素
className className是指定类名的元素
classNameMatches className类名符合指定正则的元素
description description是指定文本的元素
descriptionContains description中包含有指定文本的元素
descriptionMatches description符合指定正则的元素
descriptionStartsWith description以指定文本开头的元素
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
packageName packageName为指定包名的元素
packageNameMatches packageName为符合正则的元素
resourceId resourceId为指定内容的元素
resourceIdMatches resourceId为符合指定正则的元素

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详细使用方法

相关推荐

  1. App测试自动化工具UIAutomator2使用

    2024-07-15 06:30:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 06:30:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 06:30:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 06:30:02       62 阅读
  4. Python语言-面向对象

    2024-07-15 06:30:02       72 阅读

热门阅读

  1. React@16.x(57)Redux@4.x(6)- 实现 bindActionCreators

    2024-07-15 06:30:02       29 阅读
  2. PyTorch构建一个肺部CT图像分类模型来分辨肺癌

    2024-07-15 06:30:02       19 阅读
  3. Python学生信息管理系统的设计与实现

    2024-07-15 06:30:02       29 阅读
  4. SQL优化

    SQL优化

    2024-07-15 06:30:02      34 阅读
  5. RocketMQ

    RocketMQ

    2024-07-15 06:30:02      24 阅读
  6. SpringBoot实战:定时任务

    2024-07-15 06:30:02       21 阅读
  7. .NET 开源库技术栈汇总

    2024-07-15 06:30:02       20 阅读
  8. UDP 报文结构与注意事项全解析

    2024-07-15 06:30:02       28 阅读
  9. 深入理解Symfony框架中的数据验证机制

    2024-07-15 06:30:02       22 阅读
  10. OpenCV——实现视频图像的来回摆动的效果

    2024-07-15 06:30:02       19 阅读