之前呢一直用的python+appium做安卓自动化测试,最近看大佬的博客,发现了又一个神器,简单介绍一下哈:
转载地址:https://mp.weixin.qq.com/s/TWhKS1EORLT4Ua26heM8aA
uiautomator2 的api文档:https://www.cnblogs.com/jec1999/p/8976960.html
iautomator是Google提供的用来做安卓自动化测试的一个Java库。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:
我们希望测试能够用Python编写,能够在电脑上运行的时候就控制手机,于是就有了python-uiautomator,后来又有了python-uiautomator2,详情查看github地址https://github.com/openatx/uiautomator2
使用pip3安装uiautomator2 ,安装的过程中有点坑,用pip install --pre -U uiautomator2
一直安装失败,找了很多教程都是这个。
最后去github上找了下教程https://github.com/openatx/uiautomator2,发现用pip3安装,抱着试试的心态,安装成功了
需cd到python的Scripts目录,再使用pip3安装
E:\python36\Scripts>pip3 install -U uiautomator2
确保手机和电脑能连得上,使用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 init
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
使用pip安装weditor,github地址https://github.com/openatx/weditor
pip install —pre weditor
创建桌面快捷图标
python -m weditor —shortcut
创建完成后,桌面会出现一个WEditor快捷图标,双击就能启动了
也可以不创建图标,用命令行启动
python -m weditor
看到窗口出现如下信息,就是启动成功了(窗口别关掉了)
C:\Users\dell>python -m weditor
listening on http://192.168.1.125:17310
[I 190717 23:50:55 web:2246] 304 GET / (::1) 7.98ms
[I 190717 23:50:55 web:2246] 304 GET /static/libs/css/buttons.css (::1) 196.47ms
[I 190717 23:50:55 web:2246] 304 GET /static/loading.svg (::1) 5.99ms
[I 190717 23:50:55 web:2246] 304 GET /static/ace/ace.js (::1) 12.97ms
[I 190717 23:50:55 web:2246] 304 GET /static/running.svg (::1) 13.96ms
[I 190717 23:50:55 web:2246] 304 GET /static/ace/mode-python.js (::1) 19.96ms
[I 190717 23:50:55 web:2246] 304 GET /static/libs/fontawesome/css/font-awesome.min.css (::1) 1.99ms
[I 190717 23:50:59 web:2246] 304 GET /api/v1/version (::1) 0.00ms
先使用adb连上手机,输入adb devices查看手机设备号:emulator-5554
C:\Users\dell>adb devices
List of devices attached
adb server version (31) doesn't match this client (40); killing...
* daemon started successfully
emulator-5554 device
在页面上输入手机设备号,点Connet按钮,看到出现一个小草的图标,就是连接成功了
定位元素的方法支持uiautomator的定位方法,也可以支持xpath和坐标定位
可以在页面的右边调试运行代码,这点比appium强很多,可以编写代码边调试,还是非常方便的
操作步骤:点勾选高铁动车后,点查询按钮
d(resourceId="com.yipiao:id/checkGaotie").click()
d.xpath('//*[@resource-id="com.yipiao:id/layQueryCard"]/android.widget.FrameLayout[1]').click()
Ctr+Enter
运行代码,会发现手机上已经点击成功
首先保证电脑和手机wifi在一个局域网,电脑上能ping的通手机的ip,输入手机的ip也可以抓到手机上的页面元素
看完上面的文章再加上文章开头的api文档相信基本使用应该没问题了,下面呢,我写一个用uiautomator2去支付宝收集能量的一个脚本哈:
脚本如下:
# coding:utf-8
import uiautomator2 as u2
d = u2.connect_usb('740dc3d1')
print('打开支付宝')
d.app_start('com.eg.android.AlipayGphone')
print('点击蚂蚁森林')
d.xpath('//*[@text="蚂蚁森林"]').click()
n = d(descriptionContains='收集').count
for i in range(n):
d.xpath('//*[contains(@content-desc,"收集能量")]').click()
print('收集能量成功')
print('收集能量结束!')
怎么样?只要将这个脚本设置未定时任务就可以自己每天定时去收取能量了,这样你的小树才会长得快呀!