ATX 给大家介绍一下 uiautomator2 这个项目

codeskyblue · 2017年11月19日 · 最后由 codeskyblue 回复于 2019年06月15日 · 7371 次阅读

简要说明

这里要说的 uiautomator2 是一个 python 库,用于 Android 的 UI 自动化测试,项目地址https://github.com/openatx/uiautomator2. 项目发源于 xiaocong 的uiautomator这个项目,新项目最大的改变要数原来手机必须数据线连接电脑的,但是使用了 uiautomator2 这个项目,就可以用 WiFi 代替 USB 连接电脑了。简单来说就是可以不用数据线了。

实现原理简介

第一步还是需要手机连接到电脑的。电脑使用 adb 向手机推送了一个二进制文件: atx-agent. 然后启动这个程序,程序自身屏蔽掉 SIGHUP 信号,这样数据线断开之后,程序就不会被杀掉了。
第二步拔掉数据线,保持手机的 Wifi 开启,并且一直有电的状态。
第三步 atx-agent 实际上还是一个 http 服务器,运行在电脑上的 python 程序使用 HTTP 协议跟手机上 atx-agent 通信,atx-agent 随后启动 uiautomator.apk 这个应用,将收到的请求转换成 UiAutomator 的 UI 自动化操作。

没有数据线的好处

  1. 不用担心数据线的损坏问题
  2. 不用担心电脑 adb 的不稳定问题
  3. 不用担心手机的开发者选项经常会定时关闭 usb 调试

其他的 adb 操作没有数据线如何实现?

  1. push 文件到手机上?

    这里使用的是 http 文件上传

  2. 从手机上 pull 文件到电脑上?

    这里使用的是 http 的文件下载

  3. adb install如何实现?

    先上传 apk 文件到手机上,然后调用pm install达到一样的效果

  4. 还想要adb shell终端怎么办?

    为此我专门写了一个网页版的 web terminal, 用的是流行的 term.js

我该如何使用这个库?

这个项目目前还属于火热的开发状态,随时关注项目主页的 README https://github.com/openatx/uiautomator2. 里面有足够多的信息,保证让你可以学会如何使用。

还有更多问题欢迎留言。😀

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 39 条回复 时间 点赞

前排点赞!

通过 minicap 加快截图速度
get png as raw data

屏幕截图的二进制流怎么实现的?直接截取的 minicap 的吗?

关注关注!!

文平 回复

minicap 也可以截单张图片

codeskyblue 回复

嗯,minicap 截取单张图命令试过,效率还可以。
我设想能不能在安卓中直接把 minicap 吐出的数据流拿出来直接放内存,然后通过安卓 APP 集成的 opencv
去进行模板匹配和图片对比,主要是为了避免把截屏保存到 sdcard 再读入内存进行模板匹配,提升识别效率。

赞 tester 福音

我怎么用的 uiautomator 本身就可以直接用 wifi 连接?

这个轮子有什么不一样呢😈

ut2 在游戏里的作用好像比较少

文平 回复

保存到内存和文件其实效率差不太多

啵板 回复

u2 是作为游戏测试框架的底层使用的,负责游戏包的安装和点击操作

codeskyblue 回复

哦哦!多谢指导。

codeskyblue 使用 u2 实现九宫格图案解锁 中提及了此贴 11月29日 16:29

atx-agent 这个可以跟谷歌原生的 UIAUtomator2 一起使用吗,用 JAVA?

wangpengfei100 回复

看你是想用 atx-agent 的什么功能了

这个是 用的 google 原生的 uiautomator 还是 uiautomator2 吗?

一开始我是不太看好 atx 的,codeskyblue 大神慢慢的把 atx 越做越好。

运行 python -m uiautomator2 init 就报 ssl 错误,如下
File "D:\TestTools\Python36_3\lib\site-packages\requests\adapters.py", line 506, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /codeskyblue/stf-binaries/raw/master/node_modules/minicap-prebuilt/prebuilt/arm64-v8a/lib/android-23/minicap.so (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)'),))
有人遇到过吗

蓝眼墨 回复

Uiautomator2

0x88 回复

还在不断的完善,多亏公司给我时间让我不断的折腾

卡卡西 回复

下载出错,重来一次

codeskyblue 回复

能定位 游戏的 view 吗? 比如 cocos 的游戏,听说 2 可以

蓝眼墨 回复

不可以

codeskyblue 回复

toast 可以 检测到吗

蓝眼墨 回复

不可以,还没增加这个功能

25楼 已删除
codeskyblue 回复

uiautomator2 是可以获取 toast appium 也实现了,期待加一下 这个功能

文平 回复

请问知道怎么能拿到 minicap 的数据吗?

请问在执行 init 的时候报这个错,咋办??是 android 设备号中出现&符号导致的,如何解决呢??

你好,python uiautomator2 对于安卓 P 版本是否支持呢?如果不支持的话,后续有计划支持吗?

240581580 回复

我没有 p 的手机,你有的话可以试试

请问博主,用什么命令从手机上 pull 文件到电脑上?http 的文件下载如何实现?

您好~我想請問一下~~~我要想要 build atx-agent, 我在 ubuntu 有成功了, 但執行./atx-agent -d 沒有什麼反應, 這是為什麼呢,
只有出現 usage 的訊息

eric.tsai 回复

这个 atx-agent 是在手机上运行的

codeskyblue 回复

有的~~我也有 build 成 arm 的放到手機上使用, 但仍然會這樣, 看起來好像無法讀到外部 parameter 才會一直出現 help 內的訊息

codeskyblue openatx/uiautomator2 的插件机制 中提及了此贴 09月09日 18:52

这个项目能够 WiFi 连接了,有几个问题就是 1.如何测试同一个局域网的多台手机,判断有点复杂,要考虑哪些 ip 在线,哪些是手机等。这个可以考虑有大佬做个方法哇 2.还有重启手机后手机端程序掉线,比较麻烦,因为很多手机 adb 不稳定,经常检测不到用 adb devices.这个能否用后台守护进程把挂掉的程序拉起来解决,因为 ui2 部分程序还是在线的,只掉了一部分程序。理论上是可以离线拉起整个程序的 3.安装软件的那个命令使用有些繁琐,看了文档也不知道如何用。4.disable_popups 功能太好用了,希望能有稳定版出来,哈哈

ui2 能不能把掉线的 ATX 拉起来?

匿名 #38 · 2018年11月30日

init 失败,怎么解决?

网易的镜像地址挂了吧,用 github 的

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44
蓝眼墨 回复

怎么切换到网易的镜像呢?

simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08

http://url/dump/hierarchy 为什么返回值为 404

lyhmmm 回复

atx-agent 0.6.0 以上才可以

Jerry li 专栏文章:如何在 robot framework 中使用 uiautomator2 替换 appiumLibrary 中提及了此贴 08月01日 22:29
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册