uiautomator 踩坑和相关指令

这篇博客主要探讨了uiautomator的基本原理和在实际操作中遇到的问题。通过执行weditor,会调用atx并启动一个进程。当出现错误提示时,可能是因为uiautomator进程未正确关闭导致。解决方法包括使用adb shell检查并结束uiautomator进程,确保每次启动weditor时使用新的标签页连接终端。同时,可以手动检查uiautomator服务状态以确认其正常运行。

一 基本原理
执行 weditor, 会在测试终端调用 atx, 且本机启动一个进程:
在这里插入图片描述
查看进程的命令: adb shell ps | find "uiautomator", 图中的 11083为进程 pid
杀死进程的命令: adb shell kill pid

二 报错
如果在 weditor界面中同步终端, 出现如下报错:
在这里插入图片描述
看cmd 日志, 有:
在这里插入图片描述
这种情况可执行 adb shell am instrument -w -r -e debug false -e class com.github.uiautomator.stub.Stub com.github.uiautomator.test/androidx.test.runner.AndroidJUnitRunner 查看 uiautomator启动是否正常, 如果不正常常见问题是已有另一个 uiautomator 进程正在运行. 可能是没有杀死上一个进程, 就重新执行了 weditor

解决方法就是 adb shell 查看进程+ 杀死进程. 注意杀死进程后重新打开 weditor, 请使用新的标签页连接终端

另外, atx手动打开, 可以查看 uiautomator服务是否正常, 正常的样子如下:
在这里插入图片描述

`uiautomator2` `uiautomator` 是 Android UI 自动化的两个 Python 库,但它们在架构、功能兼容性上有显著差异。以下是主要区别: --- ### **1. 架构与通信方式** | 特性 | `uiautomator` (旧版) | `uiautomator2` (新版) | |---------------------|-----------------------------------------------|-----------------------------------------------| | **底层实现** | 基于 Java 的 `UiAutomator` 框架 | 重写底层协议,使用 `atx-agent` 服务通信 | | **通信方式** | 通过 `adb shell` 调用 Java 代码 | 基于 HTTP 协议与设备端服务交互 | | **设备端服务** | 无独立服务,依赖系统原生 `uiautomator` | 需安装 `atx-agent`(自动部署) | --- ### **2. 功能对比** | **功能** | `uiautomator` | `uiautomator2` | |---------------------|--------------------------------------------|---------------------------------------------| | **元素定位** | 仅支持基础 XPath 属性选择器 | 支持更强大的定位方式(如正则、相对坐标) | | **截图与OCR** | 需额外集成 `OpenCV` | 内置截图 OCR 功能(需安装 `pillow`) | | **性能** | 较慢(频繁 ADB 调用) | 更快(HTTP 长连接复用) | | **手势操作** | 基础滑动/点击 | 支持复杂手势(如拖拽、多点触控) | | **兼容性** | 仅支持 Android 4.1~8.1 | 支持 Android 4.4+(部分功能需 Android 5.0+) | --- ### **3. 代码示例对比** #### **(1) 初始化设备连接** ```python # uiautomator (旧版) from uiautomator import device as d d.screen.on() # 唤醒屏幕 # uiautomator2 (新版) import uiautomator2 as u2 d = u2.connect() # 支持 USB/Wi-Fi 连接 d.unlock() # 直接解锁屏幕 ``` #### **(2) 元素操作** ```python # uiautomator (旧版) d(text="Settings").click() # 可能因响应慢超时 # uiautomator2 (新版) d(text="Settings").click(timeout=10) # 显式超时设置 d.xpath("//*[contains(@text,'OK')]").wait(5).click() ``` --- ### **4. 兼容性与维护** - **Python 版本支持** - `uiautomator`: 兼容 Python 2.7/3.x,但已停止更新(最后版本 `0.3.3`)。 - `uiautomator2`: 仅官方推荐 Python 3.x,旧版 `0.1.x` 支持 Python 2.7。 - **维护状态** - `uiautomator`: 已废弃,不推荐新项目使用。 - `uiautomator2`: 活跃维护,持续更新(GitHub 仓库活跃)。 --- ### **5. 如何选择?** - **用 `uiautomator` 如果**: - 需兼容极旧 Android 设备(4.1~4.3)。 - 项目已基于旧版开发且无升级计划。 - **用 `uiautomator2` 如果**: - 需要现代功能(如 OCR、复杂手势)。 - 追求更快的执行速度稳定性。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值