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

codeskyblue · November 19, 2017 · Last by HuangDz replied at December 27, 2018 · 12511 hits

简要说明

这里要说的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. 里面有足够多的信息,保证让你可以学会如何使用。

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

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

前排点赞!

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

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

关注关注!!

文平 回复

minicap也可以截单张图片

codeskyblue 回复

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

赞 tester福音

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

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

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

文平 回复

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

啵板 回复

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

codeskyblue 回复

哦哦!多谢指导。

codeskyblue 使用 u2 实现九宫格图案解锁 中提及了此贴 29 Nov 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 可以 检测到吗

蓝眼墨 回复

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

25Floor has been deleted
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 Sep 18:52

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

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

init失败,怎么解决?

hellohtr 回复

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

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

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

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