干货 | 一文搞定 uiautomator2 自动化测试工具使用

简介: 干货 | 一文搞定 uiautomator2 自动化测试工具使用

1080×459 21.3 KB


Google 官方提供了一个 Android 自动化测试工具(Java 库),基于 Accessibility 服务,功能很强,可以对第三方 App 进行测试,获取屏幕上任意一个 App 的任意一个控件属性,并对其进行任意操作,但有两个缺点:

1.测试脚本只能使用 Java 语言;

2.测试脚本要打包成 jar 或者 apk 包上传到设备上才能运行;

实际工作中,我们希望测试逻辑能够用 Python 编写,能够在电脑上运行的时候就控制手机。所以基于这个目的开发了 python-uiautomator2 自动化测试开源工具,其封装了谷歌自带的 uiautomator2 测试框架,可以运行在支持 Python 的任一系统上,目前版本为 V2.10.2。

GitHub 开源地址:

如图所示,python-uiautomator2 主要分为两个部分,python 客户端,移动设备

  • python 端: 运行脚本,并向移动设备发送 HTTP 请求;
  • 移动设备:移动设备上运行了封装了 uiautomator2 的 HTTP 服务,解析收到的请求,并转化成 uiautomator2 的代码;
    整个过程:
    3.在移动设备上安装 atx-agent(守护进程),随后 atx-agent 启动 uiautomator2 服务(默认 7912 端口)进行监听;
    4.在 PC 上编写测试脚本并执行(相当于发送 HTTP 请求到移动设备的 server 端);
    5.移动设备通过 WIFI 或 USB 接收到 PC 上发来的 HTTP 请求,执行制定的操作;
    使用 pip 安装
    安装完成后,使用如下 python 代码查看环境是事配置成功
    说明:后文中所有代码都需要导入 uiautomator2 库,为了简化我使用 u2 代替,d 代表 driver
    能正确打印出设备的信息则表示安装成功
    注意:需要安装 adb 工具,并配置到系统环境变量,才能操作手机。
    安装有问题可以到 issue 列表查询:
    weditor 是一款基于浏览器的 UI 查看器,用来帮助我们查看 UI 元素定位。
    因为 uiautomator 是独占资源,所以当 atx 运行的时候 uiautomatorviewer 是不能用的,为了减少 atx 频繁的启停,就需要用到此工具
    使用 pip 安装
    查看安装是否成功
    出现如下信息表示安装成功
    运行 weditor
    ui2 支持 android 中 UiSelector 类中的所有定位方式,详细可以在这个网址查看 https://developer.android.com/reference/android/support/test/uiautomator/UiSelector
    整体内容如下 , 所有的属性可以通过 weditor 查看到

    子元素定位
    child()
    兄弟元素定位
    sibling()
    链式调用
    相对定位支持在left, right, top, bottom, 即在某个元素的前后左右
    表格标注有 @property 装饰的类属性方法,均为下方示例方式

exists 其它使用方法:

info() 输出信息:

可以通过上方信息分别获取元素的所有属性

因为 Java uiautoamtor 中默认是不支持 xpath,这是属于 ui2 的扩展功能,速度会相比其它定位方式慢一些

在 xpath 定位中,ui2 中的 description 定位需要替换为 content-desc,resourceId 需要替换为 resource-id

使用方法

Android<4.3 时不能使用拖动

滑动有两个,一个是在 driver 上操作,一个是在元素上操作

元素上操作

从元素的中心向元素边缘滑动

driver 上操作

即对整个屏幕操作

driver 滑动的扩展方法,可以直接实现滑动,不需要再自己封装定位点

android>4.3

对元素操作

封装好的放大缩小操作

设置 scrollable 属性为 True;

滚动类型:horiz 为水平,vert 为垂直;

滚动方向:

  • forward 向前
  • backward 向后
  • toBeginning 滚动至开始
  • toEnd 滚动至最后
  • to 滚动直接某个元素出现
    所有方法均返回 Bool 值;
    5.8.1 输入自定义文本
    5.8.2 输入按键
    两种方法
    目前 press 支持的按键如下
    keyevent 是通过 “adb shell input keyevent” 方式输入,支持按键更加丰富
    更多详细的按键信息 https://developer.android.com/reference/android/view/KeyEvent.html
    5.8.3 输入法切换
    5.8.4 模拟输入法功能
    可以模拟的功能有 go ,search ,send ,next, done ,previous。
    如果使用 press 输入按键无效,可以尝试使用此方法输入
    使用 wather 进行界面的监控,可以用来实现跳过测试过程中的弹框
    当启动 wather 时,会新建一个线程进行监控
    可以添加多个 watcher
    用法
    2.11.0 版本 新增了一个 watch_context 方法 , 写法相比 watcher 更简洁,官方推荐使用此方法来实现监控,目前只支持 click() 这一种方法。
    这里可以用来实现图案解锁
    使用 touch 类
    这个感觉是比较有用的一个功能,可以在测试用例开始时录制,结束时停止录制,然后如果测试 fail。则上传到测试报告,完美复原操作现场,具体原理后面再去研究。
    首先需要下载依赖,官方推荐使用镜像下载:
    执行录制:
    下载与录制视频同一套依赖。
    这个功能是首先手动截取需要点击目标的图片,然后 ui2 在界面中去匹配这个图片,目前我尝试了精确试不是很高,误点率非常高,不建议使用。
    可以从本地路径及 url 下载安装 APP,此方法无返回值,当安装失败时,会抛出 RuntimeError 异常
    默认当应用在运行状态执行 start 时不会关闭应用,而是继续保持当前界面。
    如果需要消除前面的启动状态,则需要加 stop=True 参数。
    stop 和 clear 的区别是结束应用使用的命令不同
    stop 使用的是 “am force-stop”
    clear 使用的是 “pm clear”
    卸载全部应用返回的包名列表并一定是卸载成功了,最好使用 verbose=true 打印一下信息,这样可以查看到是否卸载成功
    或者可以修改一下源码,使其只输出成功的包名,注释的为增加的代码,未注释的是源码
    connect() 可以使用如下其它方式进行连接
    8.2.1 获取 driver 信息
    8.2.2 获取设备信息
    会输出测试设备的所有信息,包括电池,CPU,内存等
    8.2.3 获取屏幕分辨率
    8.2.4 获取 IP 地址
    8.3.1 使用 settings 设置
    查看 settings 默认设置
    修改默认设置,只需要修改 settings 字典即可
    8.3.2 使用方法或者属性设置
  • http 默认请求超时时间
  • 当设备掉线时,等待设备在线时长
  • 元素查找默认等待时间
  • 打开 HTTP debug 信息
  • 休眠
    value 值参考,只要是元组中的任一一个值就可以。
    打开通知栏
    打开快速设置
    8.7.1 导入文件
    8.7.2 导出文件
    使用 shell 方法执行
    8.8.1 执行非阻塞命令
    output 返回的是一个整体的字符串,如果需要抽取值,需要对 output 进行解析提取处理
    8.8.2 执行阻塞命令(持续执行的命令)
    源码描述
    因为有 atx-agent 的存在,Uiautomator 会被一直守护着,如果退出了就会被重新启动起来。但是 Uiautomator 又是霸道的,一旦它在运行,手机上的辅助功能、电脑上的 uiautomatorviewer 就都不能用了,除非关掉该框架本身的 uiautomator
    使用代码停止
    手动停止
    直接打开 ATX APP(init 成功后,就会安装上),点击关闭 UIAutomator
    以上,欢迎大家一起交流探讨。

原文链接

更多技术文章

相关文章
|
5天前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
55 35
|
5天前
|
缓存 数据可视化 jenkins
推荐2款实用的持续集成与部署(CI&CD)自动化工具
推荐2款实用的持续集成与部署(CI&CD)自动化工具
|
10天前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
20 2
|
11天前
|
运维 监控 开发工具
自动化运维工具的设计与实现
【8月更文挑战第31天】在现代软件开发和运维领域,自动化工具已成为提升效率、减少人为错误的关键。本文将介绍如何设计并实现一个自动化运维工具,旨在帮助团队简化日常任务,确保部署流程的顺畅与一致性。通过具体案例,我们将探讨工具的架构、功能模块以及如何集成到现有的运维流程中。
|
12天前
|
运维 Prometheus 监控
自动化运维工具的探索与实践
【8月更文挑战第31天】在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文通过介绍几款流行的自动化运维工具,结合实例探讨它们在实际工作中的应用及效果,旨在为读者提供一份实用的自动化运维指南。
|
14天前
|
测试技术
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
25 4
|
12天前
|
存储 运维 应用服务中间件
自动化运维工具:Ansible入门教程
【8月更文挑战第31天】在这个数字化时代,运维工作的重要性日益凸显。为了提高运维效率,自动化工具应运而生。本文将介绍Ansible这一自动化运维工具的基本概念、安装过程以及简单的使用示例,帮助读者快速上手并应用到实际工作中。
|
17天前
|
运维 Ubuntu Linux
自动化运维工具:Ansible入门与实践
【8月更文挑战第26天】在现代IT运维领域,自动化已成为提升效率和减少人为错误的关键。Ansible作为一款流行的自动化运维工具,以其简洁性和易用性受到广泛欢迎。本文将介绍Ansible的基本概念、安装过程以及一个简单的使用示例,帮助初学者快速上手并应用到实际的运维工作中。通过深入浅出的方式,我们将探索Ansible如何简化日常的系统管理和配置任务,让读者能够理解并实现自己的自动化脚本。
|
18天前
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
|
11天前
|
运维 网络安全 Python
自动化运维工具的搭建与实践
【8月更文挑战第32天】本文将介绍如何通过Python脚本实现自动化运维工具的搭建,包括环境准备、功能实现和代码示例。我们将从简单的任务开始,逐步深入,最终构建一个实用的自动化运维工具。无论你是运维新手还是经验丰富的专家,这篇文章都将为你提供有价值的参考和启示。让我们一起探索自动化运维的世界吧!