Android Uiautomator2 Python Wrapper新手入门:5分钟搭建自动化测试环境
你还在为Android自动化测试环境配置繁琐而烦恼?还在为工具链依赖复杂而头疼?本文将带你5分钟从零搭建稳定高效的Android自动化测试环境,让你专注于测试逻辑而非环境配置。读完本文你将获得:
- 快速安装uiautomator2的完整步骤
- 设备连接与环境验证的实用技巧
- 第一个自动化脚本的编写与运行方法
- 常见问题的解决方案与最佳实践
环境准备与安装
系统要求
| 环境 | 版本要求 | 说明 |
|---|---|---|
| Python | 3.8+ | 推荐使用3.9或更高版本以获得最佳兼容性 |
| Android设备 | 4.4+ (API 19+) | 支持物理设备和模拟器 |
| ADB工具 | 已配置环境变量 | 确保adb devices命令可正常运行 |
快速安装uiautomator2
通过pip命令一键安装最新版uiautomator2:
pip install -U uiautomator2
验证安装是否成功:
uiautomator2 --help
若输出帮助信息,则表示安装成功。
安装UI元素查看器
为了方便定位UI元素,推荐安装uiauto.dev:
pip install uiautodev
启动UI查看器:
uiauto.dev
然后在浏览器中访问https://uiauto.dev即可查看设备界面结构。
设备连接与环境验证
设备连接流程
启用开发者选项与USB调试
- 在Android设备上,进入"设置" → "关于手机"
- 连续点击"版本号"7次,启用开发者选项
- 返回设置,进入"开发者选项"
- 开启"USB调试",并允许电脑调试权限
验证ADB连接
连接设备后,在电脑终端执行:
adb devices
若输出类似以下内容,则设备连接成功:
List of devices attached
123456f device
初始化设备环境
在Python交互式环境中执行:
import uiautomator2 as u2
d = u2.connect() # 连接设备
print(d.info) # 获取设备信息
若输出设备信息类似以下内容,则环境初始化成功:
{
'currentPackageName': 'com.android.launcher',
'displayHeight': 1920,
'displayRotation': 0,
'displaySizeDpX': 411,
'displaySizeDpY': 731,
'displayWidth': 1080,
'productName': 'OnePlus5',
'screenOn': True,
'sdkInt': 27,
'naturalOrientation': True
}
第一个自动化测试脚本
基本脚本结构
示例:启动设置应用并截图
import uiautomator2 as u2
import time
# 连接设备
d = u2.connect() # 单个设备可省略参数,多个设备需指定序列号如u2.connect("123456f")
# 设置元素查找超时时间为10秒
d.implicitly_wait(10.0)
# 启动设置应用
d.app_start("com.android.settings")
# 等待应用启动
time.sleep(2)
# 截图并保存
d.screenshot("settings_screenshot.jpg")
# 关闭设置应用
d.app_stop("com.android.settings")
print("自动化测试完成,截图已保存")
运行脚本
将上述代码保存为first_test.py,在终端执行:
python first_test.py
若一切正常,脚本将启动设置应用、截图并关闭应用,当前目录下会生成settings_screenshot.jpg文件。
常用功能快速参考
设备控制基础操作
| 功能 | 代码示例 | 说明 |
|---|---|---|
| 屏幕操作 | d.screen_on() / d.screen_off() | 点亮/关闭屏幕 |
| 按键操作 | d.press("home") / d.press("back") | 模拟Home键/返回键 |
| 输入文本 | d.send_keys("hello") | 向当前焦点输入框发送文本 |
| 清空文本 | d.clear_text() | 清空当前输入框内容 |
| 滑动操作 | d.swipe(0.5, 0.8, 0.5, 0.2) | 从屏幕中间偏下滑动到中间偏上 |
| 方向滑动 | d.swipe_ext("up") | 向上滑动屏幕(支持up/down/left/right) |
UI元素定位与操作
# 通过文本定位元素并点击
d(text="无线和网络").click()
# 通过资源ID定位元素
d(resourceId="com.android.settings:id/title").click()
# 通过类名定位并获取所有元素
elements = d(className="android.widget.TextView").all()
for elem in elements:
print(elem.text)
# XPath定位
d.xpath("//*[@text='蓝牙']").click()
应用管理
# 安装应用(从URL)
d.app_install("https://example.com/app.apk")
# 启动应用
d.app_start("com.example.app")
# 停止应用
d.app_stop("com.example.app")
# 清除应用数据
d.app_clear("com.example.app")
# 获取应用信息
info = d.app_info("com.example.app")
print(f"应用版本: {info['versionName']}")
常见问题与解决方案
设备连接失败
问题现象:u2.connect()抛出异常或返回空设备
解决方案:
- 检查ADB连接:
adb devices确保设备正常连接 - 重启ADB服务:
adb kill-server && adb start-server - 重新授权USB调试:拔插USB线,在设备上允许调试授权
- 手动指定设备序列号:
d = u2.connect("设备序列号")
元素定位超时
问题现象:UiObjectNotFoundError异常
解决方案:
# 增加隐式等待时间
d.implicitly_wait(15.0)
# 显式等待元素出现
if d(text="目标文本").wait(timeout=10):
d(text="目标文本").click()
else:
print("元素未找到")
中文乱码问题
问题现象:获取文本显示乱码或发送中文失败
解决方案:
# 设置输入法为uiautomator2内置输入法
d.set_input_ime("com.github.uiautomator/.InputIME")
# 发送中文文本
d.send_keys("中文测试")
进阶配置与最佳实践
启用调试日志
import logging
from uiautomator2 import enable_pretty_logging
# 启用美化日志输出
enable_pretty_logging()
# 设置日志级别为DEBUG
logging.getLogger("uiautomator2").setLevel(logging.DEBUG)
浮动窗口权限设置
为确保服务稳定性,需在设备上为"uiautomator"应用授予浮动窗口权限:
- 进入设备"设置" → "应用管理" → "uiautomator"
- 找到"显示在其他应用上层"或"悬浮窗"权限
- 启用该权限
自动化测试框架集成
推荐使用pytest作为测试框架,结合uiautomator2进行更专业的测试用例管理:
# test_app.py
import pytest
import uiautomator2 as u2
@pytest.fixture(scope="module")
def device():
d = u2.connect()
d.implicitly_wait(10.0)
yield d
d.app_stop_all() # 测试结束后停止所有应用
def test_app_start(device):
device.app_start("com.android.settings")
assert "设置" in device.dump_hierarchy()
总结与展望
本文介绍了Android Uiautomator2 Python Wrapper的快速环境搭建方法,包括安装配置、设备连接、基本操作和常见问题解决。通过本文的步骤,你已经掌握了自动化测试环境的基础搭建技能。
uiautomator2作为一个轻量级但功能强大的自动化框架,具有速度快、稳定性高、API简洁等优点,非常适合Android应用的UI自动化测试和设备控制场景。后续你可以深入学习元素定位策略、复杂手势操作和测试报告生成等高级功能。
最后,建议定期查看官方文档和GitHub仓库以获取最新功能和更新:
- 项目仓库:https://gitcode.com/gh_mirrors/ui/uiautomator2
- 官方文档:项目内的README.md和QUICK_REFERENCE.md
祝你的自动化测试之旅顺利!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



