背景介绍
Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:
- 只能使用Java语言 ;
- 必须每次被上传到设备上运行;
为了解决以上缺点,才有了uiautomator2。uiautomator2是一个Android UI自动化框架,支持Python编写测试脚本对设备进行自动化。
基本原理
uiautomator2的底层是基于Google uiautomator,原理是在手机上运行了一个http服务器,将uiautomator中的功能开放出来,然后再将这些http接口,封装成Python库。(基本要求是Android >= 4.4 Python >=2.7 || <= 3.7)
三言两语不足以表达出工具的强大和许多技巧。下面我们从github上文档来学习,原文地址:https://github.com/openatx/uiautomator2
环境准备及代码思路介绍
安装之前请先确保adb已经安装,并且已添加到环境变量中。
- 安装更新最新的版本uiautomator2:
pip install --upgrade --pre uiautomator2
- 拉取github,并安装uiautomator2
git clone https://github.com/openatx/uiautomator2
pip install -e uiautomator2
以上两种方式都可以安装,除此之外pillow也是需要的,因为截图功能需要这个模块
pip install pillow
装本库所需要的设备端程序:uiautomator-server、atx-agent、openstf/minicap、openstf/minitouch,通过以下命令:
python -m uiautomator2 init
注:在命令行中启动Python脚本的时候,经常会用到-m参数,那么-m起了什么作用呢?
通过python --help 我们可以看到:
意思是将库中的python模块用作脚本去运行(就是运行包下的__main__.py文件)。那么我们就去__main__.py包中去看下到底做了什么操作,以下是源码的一部分
main函数方法其实很简单,就是接受解析命令行参数,来执行函数,类似shell脚本,我们可以通过python -m uiautomator2 来看看到底有哪些功能
也就是这个MyFire类下面的函数功能
从函数名,我们也就得知了有哪些功能,这里就不多介绍,那么我们再次回归到本次步骤的开头,python -m uiautomator2 init的操作,那么我们来看main主函数的方法
这里接受命令行参数接受的是init ,从代码来看这里是存在有一个私有变量_commadns,可以看到是
这里就执行了cmd_init函数,功能如下
执行了一些初始化操作,也就是开头所讲的安装uiautomator-server、atx-agent,openstf/minicap、openstf/minitouch客户端到终端的操作。
包含一系列的下载并通过adb安装到手机(这里就需要手机开发者权限)
有时候init也会出错,请参考手动Init指南:https://github.com/openatx/uiautomator2/wiki/Manual-Init(这里不做介绍,其实原理就是通过adb安装几个apk...)
- 安装ui查看器(目前最新的稳定版为 0.1.0)
pip install -U weditor
Windows系统可以使用命令在桌面创建一个快捷方式
python -m weditor --shortcut
命令行启动 python -m weditor 会自动打开浏览器,输入设备的ip或者序列号,点击Connect即可。
以上是uiautomator2安装环境的配置所有操作。相比于appium是不是“轻量”了很多。你不需要安装node,Android sdk等,也不会因为翻墙安装appium客户端,或者镜像安装等一些系列的操作。当然和最近据说很流行的Airtest,只能说各有千秋吧,待介绍uiautomator2完,将分享airtest。
当我们去用一个框架的时候,必须要知道其原理,最好去看源码了解是怎么实现的,同时,去学习框架的思路。