安卓自动化之uiautomator(python篇)常用adb及图片对比
时间: 2025-06-28 08:06:07 浏览: 11
### 使用 Python 和 uiautomator 进行安卓自动化测试
#### ADB 命令集成
为了执行 Android 设备上的各种操作,通常会借助于 `adb` (Android Debug Bridge) 工具。通过 Python 脚本调用 adb 命令能够方便地控制连接的设备。
例如,在获取特定路径下的文件列表时:
```python
import os
def get_anr_files(device_id):
anr_file_list_get = os.popen(f'adb -s {device_id} shell ls /data/anr').read()
return anr_file_list_get.splitlines() # 将输出按行分割成列表返回
```
此函数利用了操作系统级别的命令执行功能来查询 `/data/anr` 文件夹中的内容[^4]。
#### 初始化 uiautomator2 库并建立连接
对于更复杂的交互需求,则推荐使用 `uiautomator2` 来完成界面元素的操作。首先需安装该库并通过 USB 或 Wi-Fi 配置好与目标设备之间的通信链路[^3]。
```python
import uiautomator2 as u2
d = u2.connect('your_device_serial') # 替换为实际设备序列号或IP地址
print(d.info) # 输出当前已连通设备的信息
```
这段代码展示了怎样创建一个到指定 Android 实例的远程会话,并打印有关所选装置的一些基本信息。
#### 执行基本 UI 操作
有了上述准备之后就可以开始实施一些常见的用户行为仿真动作了,比如点击按钮、输入文字等。
```python
# 查找并点击屏幕上的某个组件
d(text="Login").click()
# 向文本框内键入字符串
d(resourceId="com.example:id/username").set_text("test_user")
# 上滑页面
d.swipe(500, 1800, 500, 800)
# 获取某控件的状态信息
button_state = d(description="Submit Button").info['enabled']
if not button_state:
raise Exception("Button is disabled!")
```
这些例子说明了如何定位应用程序界面上的不同部件以及对其施加相应的事件触发器[^2]。
#### 图像识别辅助验证
当涉及到视觉确认的任务时——如检查图标是否存在或是比较两个画面间的差异——则可引入 OpenCV 等计算机视觉库来进行处理。
下面是一个简单的图像匹配过程示例:
```python
import cv2
from PIL import ImageGrab
def compare_images(template_path, screenshot_region=(0, 0, 1920, 1080)):
template_img = cv2.imread(template_path, 0)
screen_shot = ImageGrab.grab(bbox=screenshot_region).convert('L')
img_rgb = np.array(screen_shot)
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
res = cv2.matchTemplate(img_gray, template_img, cv2.TM_CCOEFF_NORMED)
threshold = .7
loc = np.where(res >= threshold)
points = list(zip(*loc[::-1]))
if len(points)>0:
print("Match found at:", points[0])
return True
else:
print("No match found.")
return False
```
这里定义了一个名为 `compare_images()` 的方法用来检测模板图片是否存在于截屏范围内;如果找到相似度超过设定阈值的位置就会报告成功匹配的结果。
阅读全文
相关推荐


















