本文档基于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: SucceededBundle 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 步列出的页面前面的序号