Python + WDA 实现 iOS App UI 自动化测试

Python + WDA 实现 iOS App UI 自动化测试指南


一、环境准备
  1. 安装 WebDriverAgent (WDA)
    • WDA 是 Facebook 开源的 iOS 自动化测试框架,需通过 Xcode 编译并安装到 iOS 设备。
      • 方法一(Mac 环境):通过 Xcode 编译 WebDriverAgent.xcodeproj,配置开发者签名并运行 Test [2]
      • 方法二(跨平台):使用阿里开源的 tidevice 工具(支持 Windows/Linux/Mac),无需 Xcode 即可启动 WDA 服务(IOS系统14版本后很难搞):
tidevice -u [设备UDID] wdaproxy -B [WDA_BundleID] --port 8100

[1] [4]

  1. Python 依赖库安装
    • 安装 facebook-wda(WDA 的 Python 客户端库):
pip3 install -U facebook-wda
- 可选工具:  
    * **weditor**:元素定位工具,安装后通过浏览器查看 UI 树:  
pip3 install -U weditor
weditor  # 启动后选择 iOS,连接 WDA 服务

[7]


二、自动化脚本编写
  1. 初始化客户端
import wda

# 连接 WDA 服务(默认端口 8100)
client = wda.Client("http://localhost:8100")
session = client.session()  # 创建会话

或者可以用另一种方式

  1. 应用操作
    • 启动/关闭应用
session.app_launch("com.example.app")  # Bundle ID
session.app_terminate("com.example.app")

启动app的另一种方式

- **获取应用状态**:  
print(session.app_current())  # 输出当前前台应用信息

[30]

  1. 元素定位与操作
    • 定位方式:支持 ID、Class、XPath、Predicate 等:
# 通过 ID 定位
element = session(id="loginButton")
# 通过 Predicate 定位(复杂条件)
element = session(predicate='label CONTAINS "Submit" AND enabled == true')
- **常用操作**:  
element.click()          # 点击
element.set_text("test") # 输入文本
element.scroll()         # 滚动
element.swipe("left")   # 滑动方向

另一种方式和安卓UI自动化uiautomator2的xpath使用类似

  1. 设备控制
    • 返回桌面/锁屏/截图
client.home()                # 返回主屏幕
client.lock()                # 锁屏
client.screenshot("screen.png")  # 截图保存

[5]


三、高级技巧
  1. 等待机制
    • 隐式等待:全局设置元素查找超时时间:
client.implicitly_wait(10)  # 单位:秒
- **显式等待**:针对特定条件轮询:  
from wda import Wait
Wait(client).until(lambda c: c(id="loading").exists == False)
  1. 弹窗处理
# 监听弹窗并自动关闭
def handle_alert():
    if session.alert.exists:
        session.alert.accept()  # 或 dismiss()

[29]

  1. 结合 Airtest/Poco
    • Airtest:图像识别驱动自动化(跨平台):
from airtest.core.api import connect_device
device = connect_device("iOS:///http://localhost:8100")
device.touch(Template("login_button.png"))  # 图像点击
- **Poco**:基于 UI 树的精确控件操作:  
from poco.drivers.ios import iosPoco
poco = iosPoco()
poco("Settings").click()

[3] [5]


四、常见问题解决
  1. WDA 启动失败
    • 检查设备 UDID 和 Bundle ID:tidevice listtidevice applist [5]
    • 确保设备信任开发者证书。
  2. 元素无法定位
    • 使用 weditor 确认元素属性是否动态变化 [7]
    • 尝试组合定位条件(如 className+label)。
  3. 自动化卡顿
    • 增加隐式等待时间或优化脚本逻辑 [12]

五、参考工具与扩展
工具/库用途文档链接
tidevice跨平台管理 iOS 设备GitHub
weditor可视化元素定位GitHub
Appium跨平台自动化测试(替代方案)官网

通过以上步骤,可快速搭建基于 Python + WDA 的 iOS 自动化测试框架,覆盖从基础操作到复杂场景的自动化需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值