iOS自动化测试全流程教程(基于WebDriverAgent+go-ios)
1. 概述
本文介绍iOS自动化测试的完整实现方案,核心通过以下工具链实现跨平台(Windows/macOS)控制iOS设备(支持iOS 17+):
- WebDriverAgent(WDA):运行在iOS设备上的服务端,负责接收并执行自动化指令(基于Appium开源项目)。
- go-ios:跨平台工具,用于在Windows/macOS上启动WDA、建立设备通信(替代macOS专属的Xcode依赖)。
- facebook-wda:WDA的Python客户端库,用于编写自动化脚本控制iOS设备。
2. 环境准备(Windows/macOS通用)
2.1 安装go-ios(核心通信工具)
go-ios是跨平台连接iOS设备的核心工具,支持启动WDA、端口转发等功能。
安装方式(二选一):
-
通过npm安装(推荐Windows):
- 先安装Node.js(含npm包管理器),验证安装:
node -v和npm -v。 - 安装go-ios:
npm install -g go-ios。 - 验证安装:
ios --help(若提示"命令未找到",需将npm的bin目录添加到系统环境变量,通常路径为C:\Users\用户名\AppData\Roaming\npm\bin)。
- 先安装Node.js(含npm包管理器),验证安装:
-
通过Go安装(推荐macOS):
- 先安装Go环境(1.18+版本),验证:
go version。 - 安装go-ios:
go install github.com/danielpaulus/go-ios@latest。 - 为统一Windows/macOS命令,复制可执行文件:
cp $GOPATH/bin/go-ios $GOPATH/bin/ios。 - 验证:
ios --help(若提示"命令未找到",需将$GOPATH/bin添加到环境变量)。
- 先安装Go环境(1.18+版本),验证:
2.2 安装iTunes(仅Windows需要)
Windows系统需依赖iTunes的usbmuxd驱动实现iOS设备USB通信:
- 下载并安装iTunes(确保安装时勾选"安装驱动程序")。
- 验证:连接iOS设备后,iTunes能识别设备即说明驱动正常。
说明 :macOS无需安装iTunes,因Xcode已内置usbmuxd服务。
2.3 安装wintun(仅Windows需要,iOS 17+必备)
iOS 17+启动WDA需依赖wintun隧道组件:
- 下载最新版wintun(选择对应系统架构):
- 64位系统:下载
wintun-xxx-amd64.msi,提取wintun.dll。 - 32位系统:下载
wintun-xxx-x86.msi,提取wintun.dll。
- 64位系统:下载
- 复制
wintun.dll到系统目录:- 64位:
C:\Windows\System32\ - 32位:
C:\Windows\SysWOW64\
- 64位:
3. WebDriverAgent(WDA)的编译与启动
WDA需在macOS上通过Xcode编译(因依赖iOS开发工具链),支持两种使用方式:直接通过Xcode启动,或生成IPA包后在Windows/macOS手动安装。
3.1 方式一:通过Xcode直接编译启动(推荐macOS用户)
3.1.1 准备WDA源码与配置
- 克隆WDA源码:
git clone https://github.com/appium/WebDriverAgent.git。 - 打开项目:双击
WebDriverAgent.xcodeproj(需安装Xcode 14+)。 - 配置签名(关键步骤):
- 选中左侧
WebDriverAgentRunner目标(红框1),进入Signing & Capabilities标签。 - 勾选
Automatically manage signing,选择Team(可用个人Apple ID登录)。 - 修改
Bundle Identifier(红框2)为唯一值(如com.yourname.WebDriverAgentRunner,避免与其他项目冲突)。 - 对
WebDriverAgentLib目标重复上述签名配置。


- 选中左侧
3.1.2 连接设备并启动WDA
- 用USB连接iOS设备,在Xcode顶部工具栏选择设备:
Product → Destination → 你的设备名称。 - 选择启动方案:
Product → Scheme → WebDriverAgentRunner。 - 启动WDA:
Product → Test(或快捷键⌘+U)。
验证启动成功:
- 设备上会显示悬浮窗:
Automation Running / Hold both volume buttons to stop。 - 在macOS终端验证:
ios forward 8100 8100(端口转发),访问http://localhost:8100/status,返回JSON即成功。
3.2 方式二:生成IPA包手动安装(支持Windows跨平台)
若需在Windows上启动WDA,先在macOS上编译生成IPA包,再通过go-ios安装到设备。
3.2.1 用xcodebuild编译IPA包
-
配置WDA签名(同3.1.1步骤)。
-
终端执行编译命令:
bash# 生成测试包(指定输出目录) xcodebuild build-for-testing \ -scheme WebDriverAgentRunner \ -sdk iphoneos \ -configuration Release \ -derivedDataPath /tmp/WDA-build -
生成IPA包:
bash# 进入编译输出目录 cd /tmp/WDA-build/Build/Products/Release-iphoneos # 创建Payload文件夹(iOS IPA包标准结构) mkdir Payload && mv WebDriverAgentRunner.app Payload/ # 打包为IPA zip -r WDA.ipa Payload -
提取IPA:在
/tmp/WDA-build/Build/Products/Release-iphoneos目录找到WDA.ipa,复制到本地。
3.2.2 通过go-ios安装并启动WDA(Windows/macOS通用)
-
安装IPA到设备:
bashios install --path /path/to/WDA.ipa # 替换为实际IPA路径 -
启动隧道(iOS 17+必需):
bashios tunnel start # 保持终端运行,隧道需持续生效 -
验证设备连接:
bashios list # 显示设备列表即连接正常,若为空:重新插拔设备→在设备上点击"信任" -
启动WDA :
先获取WDA的Bundle ID(通过
ios apps命令查看,格式类似com.yourname.WebDriverAgentRunner),再启动:bashios runwda \ --bundleid=com.yourname.WebDriverAgentRunner \ --testrunnerbundleid=com.yourname.WebDriverAgentRunner \ --xctestconfig=WebDriverAgentRunner.xctest -
端口转发(本地访问WDA):
bashios forward 8100 8100 # 将设备8100端口映射到本地8100,保持终端运行
4. 用facebook-wda控制设备
facebook-wda是WDA的Python客户端,用于编写自动化脚本。
4.1 安装客户端
bash
pip3 install -U facebook-wda
4.2 连接WDA并执行基础操作
python
import wda
# 连接本地WDA服务(端口转发后默认地址)
c = wda.Client("http://localhost:8100")
# 验证连接
print(c.status()) # 输出设备状态信息
# 基础操作示例
c.screenshot("screenshot.png") # 截图
c.press("home") # 按Home键
c.app_start("com.apple.calculator") # 启动计算器
说明 :更多API参考facebook-wda文档。
5. 用Airtest连接WDA控制设备
Airtest是可视化自动化工具,支持通过WDA连接iOS设备:
- 安装Airtest:
pip install airtest,或下载AirtestIDE。 - 在AirtestIDE中选择"iOS设备",输入WDA地址:
http://localhost:8100。 - 连接成功后即可通过图形界面录制/编写自动化脚本。
常见问题解决
-
WDA启动失败(签名错误):
- 确保设备已开启"开发者模式"(设置→隐私与安全性→开发者模式)。
- 在设备"设置→通用→VPN与设备管理"中信任开发者证书。
-
设备连接不上(ios list为空):
- Windows:检查iTunes是否识别设备,重新插拔并信任。
- macOS:通过
xcrun instruments -s devices验证设备是否在列表中。
-
iOS 17+隧道启动失败:
- 检查
wintun.dll是否正确放置到系统目录,重启电脑后重试。
- 检查