uiautomator是Google提供的用来作安卓自动化测试的一个Java库。功能很强,能够对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操做,但有两个缺点:node
咱们但愿测试可以用Python编写,可以在电脑上运行的时候就控制手机,因而就有了uiautomator,后来又有了uiautomator2,详情查看github地址https://github.com/openatx/uiautomator2python
环境准备 python 3.6 uiautomator2 0.3.3linux
分为两个部分:android
PC上的python端:运行脚本,并向系统设备发送http请求 移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。git
详情能够参考这篇:https://blog.csdn.net/zhuhuahong/article/details/81868671github
使用pip3安装uiautomator2 ,安装的过程当中有点坑,用pip install --pre -U uiautomator2
一直安装失败,找了不少教程都是这个。 最后去github上找了下教程https://github.com/openatx/uiautomator2,发现用pip3安装,抱着试试的心态,安装成功了 需cd到python的Scripts目录,再使用pip3安装app
E:\python36\Scripts>pip3 install -U uiautomator2tcp
确保手机和电脑能连得上,使用adb devices查看连接状态,adb相关的环境本篇就很少说了,搞android测试的都知道测试
E:\python36\Scripts>adb devices List of devices attached adb server version (31) doesn't match this client (40); killing... * daemon started successfully emulator-5554 device
python -m uiautomator2 initui
E:\python36\Scripts>python -m uiautomator2 init [D 190716 23:34:53 __main__:28] use cache directory: C:\Users\dell\.uiautomator2 Namespace(serial=None, server=None, subparser='init') init [I 190716 23:34:53 __main__:88] >>> Initial device AdbDevice(serial=emulator-5554) [I 190716 23:34:53 __main__:172] Install minicap, minitouch [Kminitouch |################################| 33.5K / 33.5K [?25h[D 190716 23:34:56 __main__:157] Push https://github.com/openatx/stf-binaries/raw/master/node_modules/minitouch-prebuilt/prebuilt/x86/bin/minitouch -> /data/local/tmp/minitouch:0755 [I 190716 23:34:56 __main__:176] abi:x86 seems to be android emulator, skip install minicap [I 190716 23:34:56 __main__:182] Install com.github.uiautomator, com.github.uiautomator.test [D 190716 23:34:56 __main__:100] Shell: ('pm', 'uninstall', 'com.github.uiautomator') [D 190716 23:34:56 __main__:100] Shell: ('pm', 'uninstall', 'com.github.uiautomator.test') [Kapp-uiautomator.apk |################################| 1.7M / 1.7M.7M [?25h[D 190716 23:35:05 __main__:157] Push https://github.com/openatx/android-uiautomator-server/releases/download/1.1.7/app-uiautomator.apk -> /data/local/tmp/app-uiautomator.apk:0644 [D 190716 23:35:05 __main__:100] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator.apk') [Kapp-uiautomator-test.apk |################################| 966.8K / 966.8K [?25h[D 190716 23:35:11 __main__:157] Push https://github.com/openatx/android-uiautomator-server/releases/download/1.1.7/app-uiautomator-test.apk -> /data/local/tmp/app-uiautomator-test.apk:0644 [D 190716 23:35:11 __main__:100] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator-test.apk') [I 190716 23:35:18 __main__:193] Install atx-agent [Katx-agent_0.6.0_linux_386.tar.gz |################################| 4.0M / 4.0M.0M [?25h[D 190716 23:35:23 __main__:157] Push https://github.com/openatx/atx-agent/releases/download/0.6.0/atx-agent_0.6.0_linux_386.tar.gz -> /data/local/tmp/atx-agent:0755 [D 190716 23:35:26 __main__:100] Shell: ('/data/local/tmp/atx-agent', 'server', '--stop') [D 190716 23:35:26 __main__:100] Shell: ('/data/local/tmp/atx-agent', 'server', '-d') [I 190716 23:35:26 __main__:202] Check install [D 190716 23:35:26 __main__:212] Forward: local:tcp:53461 -> remote:tcp:7912 [D 190716 23:35:28 __main__:214] atx-agent version 0.6.0 Successfully init AdbDevice(serial=emulator-5554)
看到Successfully就是安装成功了(固然老是有几个小伙伴的手机须要换下了!!!)
python-uiautomator2链接手机的方式有两种,一种是经过WIFI,另一种是经过USB
首先查看uiautomator状态是启动状态
先使用adb devices获取手机的惟一识别序列号,也就是devices前面的那一串:emulator-5554
E:\python36\Scripts>adb devices List of devices attached emulator-5554 device
测试是否链接成功,先打开你的手机上的任意app,好比淘宝,cmd输入如下信息
E:\python36\Scripts>python Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import uiautomator2 as u2 >>> d = u2.connect_usb('emulator-5554') >>> d.info {'currentPackageName': 'com.taobao.taobao', 'displayHeight': 1280, 'displayRotation': 0, 'displaySizeDpX': 360, 'displaySizeDpY': 640, 'displayWidth': 720, 'productName': 'h60-l01', 'screenOn': True, 'sdkInt': 22, 'naturalOrientation': True} >>>
看到输出'currentPackageName': 'com.taobao.taobao'说明链接成功了
首先保证手机和电脑在一个局域网,能够先ping 手机ip,看能不能ping的通
>>> import uiautomator2 as u2 >>> d = u2.connect('192.168.1.xx') >>> d.info