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

发表于:2022-9-26 09:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:今日头条

  Google 官方提供了一个 Android 自动化测试工具Java 库),基于 Accessibility 服务,功能很强,可以对第三方 App 进行测试,获取屏幕上任意一个 App 的任意一个控件属性,并对其进行任意操作,但有两个缺点:
  1.测试脚本只能使用 Java 语言;
  2.测试脚本要打包成 jar 或者 apk 包上传到设备上才能运行。
  实际工作中,我们希望测试逻辑能够用 Python 编写,能够在电脑上运行的时候就控制手机。所以基于这个目的开发了 python-uiautomator2 自动化测试开源工具,其封装了谷歌自带的 uiautomator2 测试框架,可以运行在支持 Python 的任一系统上,目前版本为 V2.10.2。
  python-uiautomator2 主要分为两个部分,python 客户端,移动设备。
  python 端: 运行脚本,并向移动设备发送 HTTP 请求;
  移动设备:移动设备上运行了封装了 uiautomator2 的 HTTP 服务,解析收到的请求,并转化成 uiautomator2 的代码。
  整个过程:
  ·在移动设备上安装 atx-agent(守护进程),随后 atx-agent 启动 uiautomator2 服务(默认 7912 端口)进行监听;
  · 在 PC 上编写测试脚本并执行(相当于发送 HTTP 请求到移动设备的 server 端);
  · 移动设备通过 WIFI 或 USB 接收到 PC 上发来的 HTTP 请求,执行制定的操作。
  使用 pip 安装安装完成后,使用如下 python 代码查看环境是事配置成功说明:后文中所有代码都需要导入 uiautomator2 库,为了简化我使用 u2 代替,d 代表 driver能正确打印出设备的信息则表示安装成功。
  注意:需要安装 adb 工具,并配置到系统环境变量,才能操作手机。安装有问题可以到 issue 列表查询:weditor 是一款基于浏览器的 UI 查看器,用来帮助我们查看 UI 元素定位。
  因为 uiautomator 是独占资源,所以当 atx 运行的时候 uiautomatorviewer 是不能用的,为了减少 atx 频繁的启停,就需要用到此工具使用 pip 安装查看安装是否成功出现如下信息表示安装成功运行 weditorui2 支持 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.html5.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 使用方法或者属性设置。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号