阿杰,我给你整理一份 uiautomator2 自动化测试工具详解,从概念、安装、基本用法到进阶技巧,带示意和代码示例。


一、什么是 uiautomator2

  • 简介
    • uiautomator2Android UI 自动化测试工具,基于 Google 的 UIAutomator 框架
    • 通过 Python 脚本操作 Android 设备,实现 UI 测试、自动化任务。
  • 特点
    1. 支持多种 Android 版本(API 16+)
    2. 操作元素灵活(通过 resource-id、text、class、description 等)
    3. 支持截图、滚动、滑动、输入文本
    4. 支持远程设备和 adb 连接

二、安装

# 安装 Python 依赖
pip install --upgrade pip
pip install uiautomator2

  • 初始化设备
# 连接设备(USB 或 Wi-Fi)
python -m uiautomator2 init

  • 通过 adb 连接设备
# USB
adb devices

# Wi-Fi
adb connect 192.168.1.100:5555


三、基础用法

1. 连接设备

import uiautomator2 as u2

# 通过设备序列号连接
d = u2.connect('device_serial')
# 通过 Wi-Fi 连接
# d = u2.connect('192.168.1.100')

2. 查看屏幕信息

print(d.info)  # 打印设备信息
print(d.display_info)  # 屏幕分辨率

3. UI 元素操作

# 点击按钮
d(text="登录").click()

# 输入文本
d(resourceId="com.example:id/input").set_text("hello")

# 滑动/滚动
d(scrollable=True).scroll.to(text="设置")

# 长按
d(text="文件").long_click()

# 截图
d.screenshot("screen.png")


四、控件定位方式

uiautomator2 支持多种定位方式:

定位方式示例
textd(text="确定")
resourceIdd(resourceId="com.example:id/btn")
classNamed(className="android.widget.Button")
description / descd(description="返回")
indexd(index=0)
组合条件d(text="登录", className="android.widget.Button")

五、高级用法

1. 等待元素

# 最多等待 10 秒
d(text="登录").wait(timeout=10)

2. 多元素操作

# 遍历列表
for item in d(className="android.widget.TextView").all():
    print(item.get_text())

3. 调用 adb 命令

d.shell("input keyevent 26")  # 点亮屏幕

4. Toast 消息捕获

msg = d.toast.get_message(5.0, default="未检测到")
print(msg)

5. App 管理

d.app_start("com.example.app")
d.app_stop("com.example.app")
d.app_clear("com.example.app")


六、实战示例:登录流程

import uiautomator2 as u2
import time

d = u2.connect('device_serial')

# 启动 App
d.app_start("com.example.app")
time.sleep(2)

# 输入账号密码
d(resourceId="com.example:id/username").set_text("ajie")
d(resourceId="com.example:id/password").set_text("123456")

# 点击登录
d(text="登录").click()

# 验证是否登录成功
if d(text="首页").exists(timeout=5):
    print("登录成功")
else:
    print("登录失败")


七、优点与适用场景

  • 优点
    1. Python 脚本简单易用
    2. 支持远程设备、USB、Wi-Fi
    3. 丰富的控件操作 API
    4. 支持截图、日志和 Toast 消息捕获
  • 适用场景
    • Android App 功能自动化测试
    • UI 回归测试
    • 自动化日常操作(批量操作 App)
    • 自动化抓取数据(需要遵守法律与协议)

八、注意事项

  1. 设备授权:首次连接需在手机端允许 USB 调试。
  2. App 权限:部分控件操作需要 App 拥有对应权限(如存储、通知)。
  3. 稳定性:复杂动画或网页控件可能导致控件识别失败,可加 wait 或使用坐标点击。
  4. Python 版本:推荐 Python 3.6+