前言

如果 TesterHome 观看不方便(目录不方便),可以去:https://wenjie.store/archives/uiautomator2 看;TesterHome 有些格式问题可能还没来得及改

PS:文中的对象 hash 如果出现上下文不一致的情况不要见怪,因为 usb 线有些不稳定,重新调试时对象 hash 就会发生变化


uiautomator2 运作链路


uiautomator2 init 做了什么


adb forward 的好处

这部分比较偏向猜想,觉得不对欢迎补充

以下操作看不懂就 SKIP 吧,你只需要知道能通过外网 adb 连接手机即可


PS:你可能会说我都知道adb connect的 ip 和 port 了,那我直接访问不就完了?如果你问出这个问题,那你可能还没完全理解上面的意思。在知道远程手机 ip:port 的情况下,如果直接使用ip:7912/info访问,是必须要打开防火墙 7912 端口的,而我上面使用adb forward根本就没打开。


click 流程

import uiautomator2 as u2

if __name__ == '__main__':

    d = u2.connect_usb(serial="af80d1e4") # connect to device
    d(text="首页").click(timeout=3)

关于 u2.connect_usb 就不过多讲解了,返回的 Devices 对象里面由多个父类接口组合而成,click 函数也是众多父类的实现之一


d(text="首页") 做了什么

上面的 session 不要在断点时展开所有属性,否则你会发现展开得很慢,因为有些属性是通过请求 atx-agent 获取的,而发现 atx-agent 进程不在时,就会自动拉起,正常的启动逻辑不是这样的。而只获取 address 属性不会有这个问题。


click(timeout=3) 做了什么

while true
do
    adb shell rm -rf /data/local/tmp/atx-agent
    sleep 0.01
done



重置 uiautomator_v2 如何进行



判定控件是否存在


默认点击实现与坑



UI 自动化稳定性/收益问题

稳定性问题


收益问题


如何规避问题



其它补充

如何远程调试 Android 上的 Golang 代码

GOOS=linux GOARCH=arm64 go build -ldflags "-extldflags -static" -ldflags= github.com/go-delve/delve/cmd/dlv
GOOS=linux GOARCH=arm64 go build -gcflags="all = -N -l"

CV 真的不靠谱吗


遇到过适合 UI 自动化落地的项目吗


有对 uiautomator2 扩展来满足需求吗


最后


↙↙↙阅读原文可查看相关链接,并与作者交流