Airtest对Tidevice接口的高效封装实践
在Windows环境下调试iOS设备时,tidevice作为主流通信库被广泛使用。Airtest团队针对高频操作场景,对核心功能进行了封装,显著提升了脚本编写效率。以下是五个关键接口的详细说明与实际应用。
1. devices():获取所有连接设备的唯一标识
该方法返回通过USB连接的所有iOS设备的UDID列表,便于快速识别目标设备。
from airtest.core.ios.ios import TIDevice
connected_devices = TIDevice.devices()
print("已连接设备UDID:", connected_devices)
2. device_info(udid):查询设备详细属性
传入指定UDID后,返回包含以下字段的设备信息字典:
productVersion:系统版本号productType:设备型号(如iPhone14,2)modelNumber:硬件型号serialNumber:序列号phoneNumber:绑定电话号码timeZone:当前时区uniqueDeviceID:设备唯一标识marketName:市场名称(如China、US)
device_data = TIDevice.device_info(udid)
print(device_data)
3. list_wda(udid):列出已安装的WDA应用包名
扫描设备上符合命名规范的WebDriverAgent实例,返回其bundle ID列表。
wda_list = TIDevice.list_wda(udid)
print("可用WDA:", wda_list)
4. ps_wda(udid):获取正在运行的WDA进程
检测当前活跃的WebDriverAgent服务,返回其包名。
running_wda = TIDevice.ps_wda(udid)
print("当前运行的WDA:", running_wda)
5. xctest(wda_bundle_id):启动特定WDA服务
通过线程异步方式启动指定包名的WDA,适用于自动化测试环境搭建。
import threading
import time
wda_package = TIDevice.list_wda(udid)[0]
thread = threading.Thread(
target=TIDevice.xctest,
args=(udid, wda_package),
daemon=True
)
thread.start()
time.sleep(5)
active_wda = TIDevice.ps_wda(udid)
print("启动后的WDA:", active_wda)
thread.join(timeout=3)
完整流程示例
结合上述接口,实现一套完整的设备初始化流程:
# -*- encoding=utf8 -*-
__author__ = "Airtest"
from airtest.core.api import *
from airtest.core.ios.ios import TIDevice
import threading
auto_setup(__file__)
# 1. 获取连接设备列表
devices = TIDevice.devices()
print("连接设备UDID:", devices)
target_udid = devices[0]
# 2. 查看设备详情
info = TIDevice.device_info(target_udid)
print("设备信息:", info)
# 3. 列出所有WDA
installed_wdas = TIDevice.list_wda(target_udid)
print("已安装的WDA:", installed_wdas)
# 4. 启动首个WDA
wda_id = installed_wdas[0]
worker = threading.Thread(
target=TIDevice.xctest,
args=(target_udid, wda_id),
daemon=True
)
worker.start()
time.sleep(5)
# 5. 验证是否成功运行
current_active = TIDevice.ps_wda(target_udid)
print("当前激活的WDA:", current_active)
# 6. 清理资源
worker.join(timeout=3)
以上接口组合可实现从设备发现到WDA服务管理的全流程自动化,极大简化了iOS端测试脚本的开发复杂度。