UiAutomator uiautomator2 知识点滴记录

蔡瑞淳 for 君海游戏QA · March 23, 2018 · Last by 蔡瑞淳 replied at January 28, 2019 · 9142 hits

一、简单介绍

1、自动化测试开源工具,仅支持Android平台的原生应用测试
2、目前仅支持脚本语言python
3、封装谷歌自带的uiautomator测试框架,提供便利的python接口

google提供的uiautomator库可获取安卓APP的控件属性,并执行相关操作,但有两个缺点:  
测试脚本只能使用Java语言
测试脚本必须每次被上传到设备上运行

4、工作原理:
原理是在手机上运行了一个http服务器,将uiautomator中的功能开放出来,然后再将这些http接口,封装成Python库

以下解释直接引用网址:https://testerhome.com/topics/11357
① 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动uiautomator2服务(默认7912端口)进行监听
② 在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
③ 移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作

二、实现功能

1、获取手机部分信息(d.info)

2、操作手机设备,比如点击Home键、锁屏、查看快捷键等(d.press("home")、d.screen_off()、d.open_quick_settings()等)

3、安装、启动、卸载应用
d.app_install('http://some-domain.com/some.apk')
d.app_start("com.example.xxx")
d.app_stop("com.example.xxx")

4、识别手机上控件、对控件进行相关操作等
d(text='Clock', className='android.widget.TextView')

参数可支持以下:
● text, textContains, textMatches, textStartsWith
● className, classNameMatches
● description, descriptionContains, descriptionMatches, descriptionStartsWith
● checkable, checked, clickable, longClickable
● scrollable, enabled,focusable, focused, selected
● packageName, packageNameMatches
● resourceId, resourceIdMatches
● index, instance

三、实际操作

1、PC端先部署好环境
①安装jdk
②安装sdk
③安装python
④使用python自带easy_install.exe工具安装pip(easy_isntall.exe pip)
⑤pip install --pre uiautomator2
2、给安卓设备安装上uiautomator工具
在电脑端执行python -m uiautomator2 init,等待安装完成即可
3、可打开PC端通过命令行命令,或者执行脚本来操作手机

四、我的总结

1、uiautomator2和uiautomatorview.bat有冲突,可直接使用weditor工具来查看控件信息
2、安装在手机上的uiautomator工具隔段时间就会有问题,因此不适合做大规模的兼容测试
3、仅支持安卓原生应用

共收到 13 条回复 时间 点赞

不错还整理了一下,那个工具隔断时间就有问题,要是有错误日志的话可以发我。我暂时还没遇到

codeskyblue 回复

哈哈,其实那个github和你的博客已经写得很全了,只是习惯性大概整理下。后面有情况发你😉 ,不过目前我判断它有问题的情况是(也有可能我漏了哪些信息判断失误):我在环境部署好,确保手机是正常连接的情况下去跑脚本,可是这脚本跑了几天,就会出现连接不上设备的情况,这时我都直接暴力处理,卸载重装然后就正常了

codeskyblue 回复

那个工具连接一段时间后又出现问题了。。。

C:\Users\Administrator>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:40:30) [MSC v.1500 64 bit (
AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

import uiautomator2 as u2
d=u2.connect("dfxxxxx41")

这个是uiautomator工具有问题时的报错:

d.info
Traceback (most recent call last):
File "", line 1, in
File "C:\Python27\lib\site-packages\uiautomator2_init.py", line 716, in _
getattr__
return getattr(self.default_session, attr)
File "C:\Python27\lib\site-packages\uiautomator2__init
.py", line 1082, in i
nfo
return self.jsonrpc.deviceInfo()
File "C:\Python27\lib\site-packages\uiautomator2__init
.py", line 275, in _
call__
return self.server.jsonrpc_retry_call(self.method, params, http_timeout)
File "C:\Python27\lib\site-packages\uiautomator2_init.py", line 281, in js
onrpc_retry_call
return self.jsonrpc_call(*args, **kwargs)
File "C:\Python27\lib\site-packages\uiautomator2__init
.py", line 304, in js
onrpc_call
data=data)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 522, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "C:\Python27\lib\site-packages\uiautomator2__init
_.py", line 185, in re
quest
resp = super(TimeoutRequestsSession, self).request(method, url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 475, in reques
t
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 596, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 473, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', error(10054, ''))

这个是我卸载后重装,uiautomator工具正常时的显示:

d.info
{u'displayRotation': 0, u'displaySizeDpY': 640, u'displaySizeDpX': 360, u'screen
On': True, u'currentPackageName': u'com.hmct.vision', u'productName': u'A1', u'd
isplayWidth': 1080, u'sdkInt': 22, u'displayHeight': 1920, u'naturalOrientation'
: True}

蔡瑞淳 回复

一般有几种可能。 1 手机没有联网(Oppo或者Vivo手机经常自己断开wifi) 2 手机重启了 3 手机和PC不在同一个网段 4 有人点击了uiautomator app上的停止atx-agent

会不会是atx-agent优先级不够高,在手机运行一段时间后被系统强行杀掉了?另外问一下,python3.6可以支持吗?

最好把agent加到系统白名单里去,现在很多系统会定期清后台的

codeskyblue 回复

1 手机没有联网——我这边是正常联网的
2 手机重启了 ——我虽然重启手机了,但是我也会重新启动uiautomator工具,这个操作有什么不对吗?
3 手机和PC不在同一个网段 ——一直都是连着那个网的,之前是可以正常连接的,应该不是这个问题
4 有人点击了uiautomator app上的停止atx-agent——没有手工停止,不知道会不会系统自动杀死,不过我尝试过退出uiautomator工具,然后再重新启动,不过还是不行,这个操作会重新启动atx-agent的吗?最后还是要卸载重装启动才好

优先级不高导致的杀死问题我后面去验证看看,,,那个python3.6的我还没用到,不太清楚诶,你试试,有空的话能不能告诉我😉

kukaka 回复

奇怪的是我有重新启动那个工具,但还是不行,我后面去加下白名单试试,谢谢你的建议😬

codeskyblue 回复

我这边经常出现atx-agent返回502,而且很难恢复,是怎么回事呢

你好,请问,我在init的时候,总是卡在这里,是怎么回事呢?
2018-05-04 15:13:51,516 - main.py:269 - INFO - Detect pluged devices: [u'X2P0215C03000834']
2018-05-04 15:13:51,516 - main.py:286 - INFO - Device(X2P0215C03000834) initialing ...
[Kminicap.so |################################| 21.8K / 21.8K
[?25h2018-05-04 15:13:54,895 - main.py:113 - INFO - install minicap
[Kminicap |################################| 566.5K / 566.5K
[?25h2018-05-04 15:13:57,733 - main.py:120 - INFO - install minitouch
[Kminitouch |################################| 33.8K / 33.8K
[?25h2018-05-04 15:14:02,065 - main.py:143 - INFO - app-uiautomator.apk(1.0.12) installing ...
[Kapp-uiautomator.apk |# | 80.0K / 1.7M

请问下 u2 怎么安装本地的应用apk?

看u2的文档说明,目前支持:d.app_install('http://some-domain.com/some.apk')

具体可参考:https://github.com/openatx/uiautomator2

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up