本文档基于Xcode8.3.3,appium-desktop-v1.1.1,appium-v1.6.5
准备环境和文件
- Mac OS 10.12
 - iOS 10
 - Apple ID,没有的可以访问创建您的Apple ID注册
 - Xcode 8,可从Apple开发者中心下载 xip 安装文件,或者直接从 App Store 下载安装
 - Node.js,选择 LTS 的 Macintosh Installer 版本 下载页面
 - appium desktop,Appium 的桌面版,选择 Latest release 的 dmg 文件 下载页面
 
安装 Appium
P.S. 以下安装如果报错没有权限时,以修改目录权限的方式解决,不要使用 sudo 或切换到 root 进行安装,以免后续每次运行都需要修改相关权限
1sudo chmod -R 777 路径
双击 Xcode 安装文件解压,将解压后的文件拉到应用程序中,打开 Xcode 同意 lisence
安装 Xcode Command Line Tools
1xcode-select --install安装 homebrew,这是用于安装后续工具的包管理器
1/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"安装 libimobiledevice,这是用于连接 iOS 设备的开源工具,类似于 Android 的 ADB
1brew install libimobiledevice --HEAD安装 carthage,WebDriverAgent 使用的依赖管理工具
1brew install carthage双击打开 Node.js 的 pkg 文件,根据提示安装即可,用于安装后续工具
使用淘宝 npm 源安装 cnpm,因为 npm 安装的时候很慢而且经常失败,后面使用 cnpm 代替 npm
1npm install -g cnpm --registry=https://registry.npm.taobao.org安装 ios-deploy,这是支持使用命令行管理 iOS 设备 app 的工具
1cnpm install -g ios-deploy双击打开 appium desktop 的 dmg 文件,在打开的窗口中将左边的 Appium 图标拖至右边的 Applications (应用程序) 图标即可;如果想要安装命令行版本,则执行以下命令安装,两个版本可以共存
1cnpm install -g appium
验证安装
安装 appium doctor
1cnpm install -g appium-doctor运行 appium doctor,检查 appium 的 iOS 环境是否安装完毕
1appium-doctor --ios
常用命令
idevice_id 获取已连接的 iOS 设备的 udid
1idevice_id -lidevicename 获取已连接的 iOS 设备的设备名称
12idevicenameidevicename -u [udid]ideviceinfo 获取 iOS 设备信息
123ideviceinfoideviceinfo -u [udid]ideviceinfo -u [udid] -k [key name]ios-deploy 管理 iOS 设备的 app
12ios-deploy -B # 获取iOS设备上所有app的bundleIDios-deploy -b [ipa文件路径] # 将指定的ipa安装到iOS设备上
在 iOS 设备上安装 WebDriverAgent
安装 WebDriverAgent 依赖,命令行版本可能会提示
Error: Cannot find module 'eslint-config-appium',不会影响正常功能1234567Appium 桌面版本cd /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgentsh ./Scripts/bootstrap.shAppium 命令行版本cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgentsh ./Scripts/bootstrap.sh使用 Xcode 打开 WebDriverAgent 项目:点击
Finder→前往→前往文件夹…,输入以下路径,点击前往,双击文件夹下的WebDriverAgent.xcodeproj打开项目12345Appium 桌面版本/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgentAppium 命令行版本/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent在 Xcode 中添加开发者账号:点击上方菜单栏的
Xcode→Preferences→Accounts,点击左下角的+按钮,选择add Apple ID,添加自己的 Apple ID 作为开发者账号1*免费开发者账号的Provisioning Profile只有7天有效期,7天之后需要使用Xcode将app重新安装一次编译 WebDriverAgentLib:
勾选
Automatically manage signing,设置 Signning 的Team为上一步添加的个人开发者账号,点击右上角的编译按钮,编译成功上方会提示 Build WebDriverAgentLib: Succeeded
编译 WebDriverAgentRunner
修改
Bundle Identifier为com.XXXXXX.WebDriverAgentRunner,必须是没有人用过的
勾选
Automatically manage signing,设置 Signning 的Team为上一步添加的个人开发者账号,点击右上角的编译按钮,编译成功上方会提示 Build WebDriverAgentRunner: Succeeded
Bundle Identifier 是 iOS 应用的唯一标识,如果 Bundle Identifier 已有人使用,会导致无法生成 app 的 Provisioning Profile,如下所示

将 WebDriverAgentRunner 安装到 iOS 设备
以下步骤在使用 Appium 连接 iOS 设备时会自动执行
有两种方式将 WebDriverAgentRunner 安装到 iOS 设备
在 Xcode 中,将 Target 切换为 WebDriverAgentRunner,目标设备选择已连接的 iOS 设备,点击菜单栏的
Product→Test
执行以下命令将 WebDriverAgentRunner 安装到 iOS 设备
1234567Appium 桌面版本cd /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgentxcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=iOS设备的udid' testAppium 命令行版本cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgentxcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=iOS设备udid' test
上一步操作后会提示 Test Failed,可以看到 iOS 设备上多了一个叫 WebDriverAgentRunner 的 app,在 iOS 设备上点击 WebDriverAgentRunner 图标启动时会有弹窗提示
不受信任的开发者
在 iOS 设备上,进入
设置→通用→设备管理,选择自己的 Apple ID 账号,点击信任 Apple ID重复第 1 步的操作,可以看到 WebDriverAgentRunner 自动启动,此时提示如下

执行以下命令,将 iOS 设备上 WebDriverAgentRunner 监听的 8100 端口映射到 macOS 本地的 8100 端口
1iproxy 8100 8100 iOS设备udid
调用 WebDriverAgent 接口
打开浏览器,访问http://localhost:8100,可以看到 json 格式的返回信息

访问http://localhost:8100/status,可以查看 WebDriverAgentRunner 的状态

或者在终端中输入以下指令调用 WebDriverAgent 的接口获取对应信息
1curl -X POST $JSON_HEADER -d "{\"using\":\"link text\",\"value\":\"name=测试环境\"}" http://localhost:8100/session/7CD2D40C-8FCB-4306-B5C2-AD68463573BF/elements
更多 url 查询可见WebDriverAgent的github wiki,Appium 对 WebDriverAgent 的接口进行了封装,所以后续不会直接使用到这些接口
使用 appium desktop 连接 iOS
模拟器
执行以下命令查看可用的 iOS 模拟器
1xcrun simctl list devices
运行 Appium,点击
Start Server打开 appium server 控制台输出窗口,点击Start New Session打开创建新会话窗口,设置Desired Capabilities;下图的 Desired Capabilities 意思是:测试的设备是系统为iOS、系统版本为10.3、设备名为iPhone SE的模拟器,测试的 app 为系统自带的 Safari 浏览器
点击右下角的
Start Session,此时 appium 会启动模拟器,在模拟器上启动 Safari 浏览器,并弹出 appium inspector 窗口
设备
运行 Appium,点击
Start Server打开 appium server 控制台输出窗口,点击Start New Session打开创建新会话窗口,设置Desired Capabilities;下图的 Desired Capabilities 意思是:测试的设备是系统为iOS、系统版本为10.1.1、设备名为iPhone6、udid 为966498ff426206145c93……的设备,测试的 app 为系统自带的 Safari 浏览器
点击右下角的
Start Session,此时 appium 会启动 iOS 设备上的 Safari 浏览器,并弹出 appium inspector 窗口
iOS 设备的 web 测试环境
安装 ios-webkit-debug-proxy
1brew install ios-webkit-debug-proxy在 iOS 设备上,进入
设置→Safari→高级,打开web 检查器在 iOS 设备上启动 Safari,访问任意网址
执行以下命令,在指定的设备上启动 IWDP
1ios_webkit_debug_proxy -c 设备udid:端口用浏览器访问
ip地址:端口,可以看到 iOS 设备上的 Safari 打开的页面,说明可以在该 iOS 设备上进行 web 自动化测试- ip地址:macOS 的 ip 地址,如果浏览器在 macOS 上则用 localhost 访问即可
 - 端口:第 4 步执行命令时指定的端口
 

在 iOS 设备上进行 web 自动化的时候,可以使用桌面浏览器的调试工具提高效率,有如下两种方式
在 macOS 上打开 Safari 浏览器,点击上方菜单栏的
开发→[设备名称]→[访问的网址],打开 Safari 的调试工具
使用 Chrome 浏览器访问以下网址来调试对应的 Safari 标签页
1chrome-devtools://devtools/bundled/inspector.html?ws=[ip地址]:[端口]/devtools/page/[页面序号]- ip地址:macOS 的 ip 地址
 - 端口:第 4 步执行命令时指定的端口
 - 页面序号:第 5 步列出的页面前面的序号
 
