ATX自动化测试框架API详解与实战指南
概述
ATX是一款强大的自动化测试框架,主要用于移动设备(Android/iOS)的UI自动化测试。本文将全面介绍ATX框架的核心API使用方法,帮助开发者快速掌握自动化测试技巧。
设备连接与初始化
Android设备连接
ATX提供了多种连接Android设备的方式:
import atx
# 基础连接方式
d = atx.connect() # 自动连接第一个可用设备
d = atx.connect("设备序列号") # 连接指定设备
环境变量配置
为了方便持续集成,ATX支持通过环境变量配置连接参数:
# Linux/macOS
export ATX_CONNECT_URL="设备序列号"
export ATX_PLATFORM="android"
# Windows
set ATX_CONNECT_URL=设备序列号
set ATX_PLATFORM=android
支持的环境变量包括:
- ATX_PLATFORM:平台类型(默认android)
- ATX_CONNECT_URL:设备连接地址
- ATX_ADB_HOST/ATX_ADB_PORT:ADB服务器地址
- ATX_ADB_SERIALNO:设备序列号(建议使用ATX_CONNECT_URL替代)
应用管理
ATX提供了完整的应用生命周期管理功能:
package_name = 'com.example.game'
main_activity = 'com.example.game.MainActivity'
# 停止应用
d.stop_app(package_name) # 仅停止
d.stop_app(package_name, clear=True) # 停止并清除数据(仅Android)
# 启动应用
d.start_app(package_name, main_activity) # 推荐方式
d.start_app(package_name, main_activity, stop=True) # 强制停止后启动
d.start_app(package_name) # 使用monkey启动(不推荐)
ADB命令执行
ATX封装了常用的ADB操作:
# 执行ADB命令
d.adb_cmd(['pull', '/data/local/tmp/hi.txt']) # 默认30秒超时
d.adb_shell(['uptime']) # 执行shell命令
# 端口转发
host, port = d.forward(10080) # 将设备10080端口转发到本地
# 获取设备信息
print(d.wlan_ip) # 获取WLAN IP
print(d.current_app()) # 获取当前运行应用信息
对于更复杂的ADB操作,可以直接使用adb_client:
c = atx.adb_client
print(c.version()) # ADB版本
print(c.devices()) # 设备列表
图像识别与操作
基础图像操作
# 图像查找
if d.exists('button.png'): # 判断图像是否存在
print('图像找到')
# 截图保存
d.screenshot('screen.png')
# 坐标点击
d.click(50, 100) # 绝对坐标
d.click(0.5, 0.5) # 相对坐标(屏幕中心)
d.long_click(50, 100) # 长按(仅Android)
高级图像操作
# 滑动操作
d.swipe(fromX, fromY, toX, toY, steps=100) # 默认0.5秒完成
d.drag(fromX, fromY, toX, toY, steps=100) # 长按后滑动
# 图像点击增强
d.click_image("button.png") # 基础点击
d.click_image("button.png", safe=True) # 安全模式(找不到不报错)
d.click_image("button.png", action='long_click') # 长按点击
d.click_exists('button.png') # 非等待式点击
多分辨率适配
ATX提供了智能的多分辨率适配方案:
# 自动适配不同分辨率
d.click_image("button@auto.png") # 自动寻找合适分辨率的图片
# 支持的文件命名格式:
# button@1920x1080.png
# button.1920x1080.png
# button@1080x1920.png
# button.1080x1920.png
高级图像匹配功能
# 偏移量点击
d.click_image("button.R20T50.png") # 向右20%,向上50%
# 等价于
d.click_image("button.png", offset=(0.2, -0.5))
# 完整参数示例
d.click_image("button.png",
offset=(0.2, 0.5),
action="long_click",
safe=True,
desc="操作描述",
method='template',
threshold=0.8,
delay=2.0)
# 区域限定查找
nd = d.region(atx.Bounds(50, 50, 180, 300)) # 在指定区域内查找
print(nd.match('folder.png'))
性能优化技巧
# 屏幕锁定(减少重复截图)
d.keep_screen()
d.click_exists("button1.png")
d.click_exists("button2.png")
d.free_screen()
# 使用上下文管理器更优雅
with d.keep_screen():
d.click_exists("button1.png")
d.click_exists("button2.png")
# 图像等待
d.wait("button.png") # 等待图像出现
d.wait_gone("button.png") # 等待图像消失
原生UI操作
ATX支持直接操作UI元素:
# 组件点击
d(text='Enter').click()
d(text='Enter').sibling(className='android.widget.ImageView').click() # 仅Android
# 文本输入
d.type("hello world")
d.type("atx", enter=True) # 输入后按回车
d.type("atx", next=True) # 输入后跳转到下一项
d.clear_text() # 清空输入
# 简化输入操作
d.type("www.baidu.com", clear=True, resourceId="com.android.browser:id/url_bar")
配置管理
# 分辨率配置
d.resolution = (1920, 1080) # 设置截图参考分辨率
# 截图方法配置
d.screenshot_method = atx.SCREENSHOT_METHOD_AUTO # 自动选择(默认)
d.screenshot_method = atx.SCREENSHOT_METHOD_UIAUTOMATOR # 使用UIAutomator
d.screenshot_method = atx.SCREENSHOT_METHOD_MINICAP # 使用Minicap
# 图像匹配配置
d.image_match_method = atx.IMAGE_MATCH_METHOD_TMPL # 模板匹配(默认)
d.image_match_method = atx.IMAGE_MATCH_METHOD_SIFT # 特征点匹配
d.image_match_threshold = 0.8 # 匹配阈值
# 屏幕方向配置
d.rotation = None # 自动检测(默认)
# 0: Home键在下(正常)
# 1: Home键在右
# 2: Home键在上
# 3: Home键在左
事件监听
def my_listener(event):
print('事件:', event)
d.add_listener(my_listener, atx.EVENT_SCREENSHOT)
d.screenshot() # 触发事件
底层接口访问
ATX底层整合了多个强大的自动化库:
# Android底层操作
d.uiautomator # 访问atx-uiautomator库的所有功能
# iOS底层操作
d.session # 访问facebook-wda库的Session对象
d.session.window_size() # 获取屏幕尺寸
总结
本文详细介绍了ATX自动化测试框架的核心API使用方法,从设备连接、应用管理到图像识别、UI操作等各个方面。掌握这些API可以帮助开发者构建稳定、高效的自动化测试脚本。ATX框架设计精良,既提供了简单易用的高级接口,也保留了访问底层功能的灵活性,是移动端自动化测试的优秀选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



