Python自动化测试框架uiautomator2使用方法详解

原创 2025-06-07 10:05:26编程技术
933

在移动应用测试领域,自动化测试框架能够显著提升测试效率和覆盖度。uiautomator2 作为一款基于Python的Android自动化测试工具,凭借其简单易用的API接口和强大的功能支持,成为许多测试工程师的首选。本文将详细解析 uiautomator2 的使用方法,从环境搭建到实际操作示例,帮助读者快速掌握这一高效工具的核心技能,并应用于实际的Android应用测试场景中。无论您是测试新手还是资深工程师,本文都能为您提供有价值的参考和启发。

一、框架简介

uiautomator2是Google开源的Android自动化测试框架uiautomator的Python封装版本,由阿里巴巴团队维护。相比Appium等传统方案,它具有以下优势:

  • 轻量级:无需安装Appium服务端

  • 高性能:直接通过ADB与设备通信

  • 原生支持:基于Android原生API开发

  • 跨平台:支持Python2/3,兼容macOS/Linux/Windows

二、环境搭建

2.1 安装依赖

# 安装Python库
pip3 install uiautomator2

# 安装ATX守护进程(手机端)
python3 -m uiautomator2 init

2.2 设备连接准备

  1. 开启USB调试模式(设置→关于手机→连续点击版本号)

  2. 允许模拟点击(设置→开发者选项→启用"USB调试(安全设置)")

  3. 连接设备并验证:

adb devices
# 应显示设备序列号

三、核心功能详解

3.1 设备连接管理

import uiautomator2 as u2

# 连接单个设备
d = u2.connect('device_serial')  # 通过序列号连接
# 或自动连接唯一设备
d = u2.connect()

# 连接多个设备
devices = u2.connect_multi(['serial1', 'serial2'])

3.2 基础操作API

3.2.1 元素定位

# 通过资源ID定位(推荐)
d(resourceId="com.example:id/btn_submit").click()

# 通过文本定位
d(text="确认").click()

# 通过XPath定位
d.xpath('//android.widget.Button[@text="登录"]').click()

# 组合定位
d(resourceId="com.example:id/et_username", text="用户名").set_text("testuser")

3.2.2 常用操作

# 点击操作
d(text="设置").click()
d.click(0.5, 0.5)  # 屏幕坐标点击

# 输入文本
d(resourceId="password").set_text("123456\n")  # 输入后自动隐藏键盘

# 滑动操作
d.swipe(0.1, 0.5, 0.9, 0.5, duration=0.5)  # 左滑
d.swipe_ext("up", 0.8)  # 向上滑动80%屏幕高度

# 截图保存
d.screenshot("homepage.png")

# 获取设备信息
print(d.device_info)  # 输出分辨率、品牌等

3.3 高级功能

3.3.1 混合应用测试

# 启动WebView上下文
d.web_context.start()

# 执行Web操作
d.web_context.click("a.login-btn")
d.web_context.set_text("input[name=username]", "web_user")

# 返回原生上下文
d.web_context.stop()

3.3.2 性能监控

# 获取CPU/内存信息
print(d.devinfo.cpu)
print(d.devinfo.meminfo)

# 监控FPS(需root权限)
d.monitor.start_fps_monitor()

3.3.3 自动化构建

# 生成页面对象模型
from uiautomator2 import Page

class LoginPage(Page):
    username = ("com.example:id/et_username", "id")
    password = ("com.example:id/et_password", "id")
    login_btn = ("//android.widget.Button[@text='登录']", "xpath")

# 使用页面对象
page = LoginPage(d)
page.username.set_text("admin")
page.login_btn.click()

python.webp

四、实战案例:微信自动化测试

4.1 测试场景

  1. 启动微信

  2. 进入通讯录

  3. 搜索指定好友

  4. 发送消息

4.2 完整代码实现

import uiautomator2 as u2
import time

def test_wechat_chat():
    # 连接设备
    d = u2.connect()
    
    # 启动微信
    d.app_start("com.tencent.mm")
    time.sleep(5)

    # 进入通讯录
    d(resourceId="com.tencent.mm:id/g2").click()
    time.sleep(2)

    # 搜索好友
    d(resourceId="com.tencent.mm:id/b_n").click()
    d(resourceId="com.tencent.mm:id/b_q").set_text("文件传输助手")
    time.sleep(1)

    # 选择搜索结果
    d(resourceId="com.tencent.mm:id/b_t").click()
    time.sleep(2)

    # 发送消息
    d(resourceId="com.tencent.mm:id/b_q").set_text("自动化测试消息\n")
    
    # 验证发送成功
    assert d(text="自动化测试消息").exists, "消息发送失败"

if __name__ == "__main__":
    test_wechat_chat()

五、调试技巧

5.1 元素定位辅助

# 实时查看页面结构
d.dump_hierarchy()  # 生成XML结构到控制台

# 实时截图查看
d.screenshot("current_view.png")

# 启动实时调试服务器
d.server.start_debugger()

5.2 异常处理

try:
    d(text="不存在的按钮").click()
except u2.exceptions.UiObjectNotFoundError:
    print("元素未找到,尝试其他定位方式")
except Exception as e:
    print(f"测试失败:{str(e)}")
    d.screenshot("error.png")  # 失败时自动截图

5.3 日志管理

import logging

# 配置日志输出
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(levelname)s: %(message)s',
    handlers=[
        logging.FileHandler("automation.log"),
        logging.StreamHandler()
    ]
)

d.logger.setLevel(logging.DEBUG)  # 设置设备操作日志级别

六、常见问题解决

6.1 设备连接失败

  1. 检查USB调试是否开启

  2. 尝试重启adb服务:

adb kill-server
adb start-server
  1. 确认设备序列号正确

6.2 元素定位不稳定

  1. 使用XPath的contains函数:

d.xpath('//*[contains(@text,"部分文本")]')
  1. 启用智能等待:

d(resourceId="btn_submit").click(timeout=10)  # 10秒内等待元素出现

6.3 性能优化建议

  1. 减少不必要的截图操作

  2. 使用XPath定位时避免绝对路径

  3. 关闭动画效果(开发者选项→动画缩放设为0.5x)

七、进阶方向

  1. 结合pytest框架构建测试体系

  2. 集成Allure生成可视化报告

  3. 开发分布式测试集群

  4. 实现图像识别辅助定位(结合OpenCV)

八、总结

uiautomator2作为轻量级Android自动化解决方案,在APP测试、性能监控、持续集成等领域有广泛应用。掌握其核心API和调试技巧,可大幅提升移动端测试效率。建议从简单场景入手,逐步构建自动化测试体系,同时关注框架更新日志以获取最新功能支持。

Python 自动化测试框架
THE END
战地网
频繁记录吧,生活的本意是开心

相关推荐

Python yield 用法大全:轻松掌握生成器与迭代器设计
在Python中,yield关键字是构建生成器的核心工具,它通过状态保存机制实现了高效的内存管理和惰性计算。与传统的迭代器实现相比,yield能将迭代器设计从复杂的类定义简化为直...
2025-09-15 编程技术
547

基于Python的旅游数据分析可视化系统【2026最新】
本研究成功开发了基于Python+Django+Vue+MySQL的旅游数据分析可视化系统,实现了从数据采集到可视化展示的全流程管理。系统采用前后端分离架构,前端通过Vue框架构建响应式界...
2025-09-13 编程技术
572

手把手教你用Python读取txt文件:从基础到实战的完整教程
Python作为数据处理的利器,文件读写是其基础核心功能。掌握txt文件读取不仅能处理日志、配置文件等常见场景,更是理解Python文件I/O的基石。本文ZHANID工具网将从基础语法到...
2025-09-12 编程技术
543

Python Flask 入门指南:从零开始搭建你的第一个 Web 应用
Flask作为 Python 中最轻量级且灵活的 Web 框架之一,特别适合初学者快速上手 Web 应用开发。本文将带你一步步了解如何在本地环境中安装 Flask、创建一个简单的 Web 应用,并...
2025-09-11 编程技术
532

Python 如何调用 MediaPipe?详细安装与使用指南
MediaPipe 是 Google 开发的跨平台机器学习框架,支持实时处理视觉、音频和文本数据。本文脚本之家将系统讲解 Python 环境下 MediaPipe 的安装、配置及核心功能调用方法,涵盖...
2025-09-10 编程技术
575

基于Python开发一个利率计算器的思路及示例代码
利率计算是金融领域的基础需求,涵盖贷款利息、存款收益、投资回报等场景。传统计算依赖手工公式或Excel表格,存在效率低、易出错等问题。Python凭借其简洁的语法和强大的数学...
2025-09-09 编程技术
515