iOS自动化测试全流程教程(基于WebDriverAgent+go-ios)

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)
    1. 先安装Node.js(含npm包管理器),验证安装:node -vnpm -v
    2. 安装go-ios:npm install -g go-ios
    3. 验证安装:ios --help(若提示“命令未找到”,需将npm的bin目录添加到系统环境变量,通常路径为 C:\Users\用户名\AppData\Roaming\npm\bin)。
  • 通过Go安装(推荐macOS)
    1. 先安装Go环境(1.18+版本),验证:go version
    2. 安装go-ios:go install github.com/danielpaulus/go-ios@latest
    3. 为统一Windows/macOS命令,复制可执行文件:cp $GOPATH/bin/go-ios $GOPATH/bin/ios
    4. 验证:ios --help(若提示“命令未找到”,需将$GOPATH/bin添加到环境变量)。

2.2 安装iTunes(仅Windows需要)

Windows系统需依赖iTunes的usbmuxd驱动实现iOS设备USB通信:

  1. 下载并安装iTunes(确保安装时勾选“安装驱动程序”)。
  2. 验证:连接iOS设备后,iTunes能识别设备即说明驱动正常。

说明:macOS无需安装iTunes,因Xcode已内置usbmuxd服务。

2.3 安装wintun(仅Windows需要,iOS 17+必备)

iOS 17+启动WDA需依赖wintun隧道组件:

  1. 下载最新版wintun(选择对应系统架构):
    • 64位系统:下载wintun-xxx-amd64.msi,提取wintun.dll
    • 32位系统:下载wintun-xxx-x86.msi,提取wintun.dll
  2. 复制wintun.dll到系统目录:
    • 64位:C:\Windows\System32\
    • 32位:C:\Windows\SysWOW64\

3. WebDriverAgent(WDA)的编译与启动

WDA需在macOS上通过Xcode编译(因依赖iOS开发工具链),支持两种使用方式:直接通过Xcode启动,或生成IPA包后在Windows/macOS手动安装。

3.1 方式一:通过Xcode直接编译启动(推荐macOS用户)

3.1.1 准备WDA源码与配置
  1. 克隆WDA源码:git clone https://github.com/appium/WebDriverAgent.git
  2. 打开项目:双击WebDriverAgent.xcodeproj(需安装Xcode 14+)。
  3. 配置签名(关键步骤):
    • 选中左侧WebDriverAgentRunner目标(红框1),进入Signing & Capabilities标签。
    • 勾选Automatically manage signing,选择Team(可用个人Apple ID登录)。
    • 修改Bundle Identifier(红框2)为唯一值(如com.yourname.WebDriverAgentRunner,避免与其他项目冲突)。

WebDriverAgentLib目标重复上述签名配置。

在这里插入图片描述


在这里插入图片描述
3.1.2 连接设备并启动WDA
  1. 用USB连接iOS设备,在Xcode顶部工具栏选择设备:Product → Destination → 你的设备名称
  2. 选择启动方案:Product → Scheme → WebDriverAgentRunner
  3. 启动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包
  1. 配置WDA签名(同3.1.1步骤)。
  2. 提取IPA:在/tmp/WDA-build/Build/Products/Release-iphoneos目录找到WDA.ipa,复制到本地。

生成IPA包:

# 进入编译输出目录cd /tmp/WDA-build/Build/Products/Release-iphoneos # 创建Payload文件夹(iOS IPA包标准结构)mkdir Payload &&mv WebDriverAgentRunner.app Payload/ # 打包为IPAzip -r WDA.ipa Payload 

终端执行编译命令:

# 生成测试包(指定输出目录) xcodebuild build-for-testing \ -scheme WebDriverAgentRunner \ -sdk iphoneos \ -configuration Release \ -derivedDataPath /tmp/WDA-build 
3.2.2 通过go-ios安装并启动WDA(Windows/macOS通用)

端口转发(本地访问WDA)

ios forward 81008100# 将设备8100端口映射到本地8100,保持终端运行

启动WDA
先获取WDA的Bundle ID(通过ios apps命令查看,格式类似com.yourname.WebDriverAgentRunner),再启动:

ios runwda \ --bundleid=com.yourname.WebDriverAgentRunner \ --testrunnerbundleid=com.yourname.WebDriverAgentRunner \ --xctestconfig=WebDriverAgentRunner.xctest 

验证设备连接

ios list # 显示设备列表即连接正常,若为空:重新插拔设备→在设备上点击“信任”

启动隧道(iOS 17+必需)

ios tunnel start # 保持终端运行,隧道需持续生效

安装IPA到设备

ios install --path /path/to/WDA.ipa # 替换为实际IPA路径

4. 用facebook-wda控制设备

facebook-wda是WDA的Python客户端,用于编写自动化脚本。

4.1 安装客户端

pip3 install -U facebook-wda 

4.2 连接WDA并执行基础操作

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设备:

  1. 安装Airtest:pip install airtest,或下载AirtestIDE
  2. 在AirtestIDE中选择“iOS设备”,输入WDA地址:http://localhost:8100
  3. 连接成功后即可通过图形界面录制/编写自动化脚本。

常见问题解决

  1. WDA启动失败(签名错误)
    • 确保设备已开启“开发者模式”(设置→隐私与安全性→开发者模式)。
    • 在设备“设置→通用→VPN与设备管理”中信任开发者证书。
  2. 设备连接不上(ios list为空)
    • Windows:检查iTunes是否识别设备,重新插拔并信任。
    • macOS:通过xcrun instruments -s devices验证设备是否在列表中。
  3. iOS 17+隧道启动失败
    • 检查wintun.dll是否正确放置到系统目录,重启电脑后重试。
Could not load content