UiAutomator uiautomator2 知识点滴记录

蔡瑞淳 for 君海游戏QA · 2018年03月23日 · 最后由 蔡瑞淳 回复于 2019年01月28日 · 4117 次阅读

一、简单介绍

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册