一、系统环境准备
大部分环境在ATX环境搭建时已经安装过了
- Xcode(Version 11.3.1 (11C504))(版本只做参考,不用完全一样)
- Python3.7 8
- Nodejs 8
二、准备WDA环境
1. WDA简介
WebDriverAgent是用于远程控制iOS设备的WebDriver服务器,它可以让你启动、终止应用程序,点击、滚动、是否存在视图。它通过链接XCTest.framework并调用Apple的API以直接在设备上执行命令来工作。 WebDriverAgent专为端到端测试而开发,并已通过XCUITest驱动程序被Appium成功采用。
2. 源码拉取
从git拉取WDA的源码:https://github.com/appium/WebDriverAgent(WDA有两个源码,一个是opentatx项目下的https://github.com/openatx/facebook-wda,openatx项目下的版本存在一些bug,推荐使用appium下已修复的版本。)
3. 运行WDA
进入WDA的目录下,运行初始化脚本
git clone https://github.com/appium/WebDriverAgent # 下载代码
cd /Users/jessietian/Code/UITest/WebDriverAgent
brew install carthage # 下载carthage
./Scripts/bootstrap.sh #该脚本会使用Carthage下载所有的依赖,使用npm打包响应的js文件
4. 打开WDA
初始化项目后,双击目录中的 WebDriverAgent.xcodeproj
文件双击,打开Xcode.
a.配置开发者证书
安装到真机上都需要苹果证书,使用企业证书或者个人证书安装
如下图,依次点击文件-项目名-webDriverAgentRunner-Signing&Capabilities-选择证书
b. 运行测试
如下图,在第一个红框位置选择运行的项目:WebDriverAgentRunner,第二个红框位置选择自己已链接的手机
选择后,选择Product-Test运行
c. 检查运行结果
在手机上会出现一个无图标的应用:WebDriverAgent,点击打开这个应用后会出现黑屏后关闭了应用。这个是正常现象。
打开xcode的控制台界面,可以看到当前链接设备的IP地址,如下:
将上图中的iP地址后面添加 /status
后,如:http://192.168.1.5:8100/status,在浏览器中打开,出现Json输出的页面,说明WDA成功了
5. 遇到的坑
- 运行代码出现了如下缺少模块无法build的情况
这个问题在代码环境什么都没有改动的时候就出现了(也可能是不小心动了什么环境引起的),原因:wda项目在Xcode中在找某个框架的路径出现了问题,解决方法:在Library Search Paths 里面加入 $(SRCROOT)/**.framework
b. 一般手机在浏览器中输入ip地址都无法看到json输出的页面,因为有些国产的iPhone机器通过手机的IP和端口还不能访问,需要将端口转发到mac本地。使用命令:
iproxy 8100 8100 # 表示将当前连接设备的8100端口(第二个8100表示设备端口)映射到电脑的8100端口(第一个8100),如果想和设备8100端口通信,直接和本地的8100端口通信就可以了。
出现waiting for connection时,在浏览器中直接输入:http://localhost:8100/ 即可,出现以下显示就是成功链接了:
c. 在转发端口时会链接出错的情况:
是由于出现了多个设备(为啥出现多个设备还不清楚原因),在转发时指定设备号就可以解决了。
iproxy 8100 8100 a68ef80417c299f32960df6197035e358a0e349b # 有时会出现有多个设备转发端口会发生错误,在最后加上需要转发设备的设备号就可以成功转发了
获取设备号的方法之一:打开Xcode,点击设备
下拉列表中选择添加模拟器选项
弹出窗口中选择需要查看的指定手机的identifier,双击复制即可
三、安装libimobiledevice工具包
libimobiledevice 是一个使用本机协议与Apple iOS设备的服务进行通信的库。支持 iPhone®, iPod Touch®, iPad® and Apple TV® 等设备的通讯协议。应用软件可以通过这个开发包轻松访问设备的文件系统、获取设备信息,备份和恢复设备,管理 SpringBoard 图标,管理已安装应用。
打开终端直接安装,命令如下
brew uninstall --ignore-dependencies libimobiledevice
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew unlink usbmuxd
brew link usbmuxd
brew install --HEAD libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstaller
四、设备连接
- 部署服务(MacOS和Windows环境下只能使用源码部署,如下; Linux环境下可以使用docker部署)
a. 从git拉取源码:https://github.com/openatx/atxserver2-ios-provider.git
b. 打开终端进入到atxsertver2-iOS-provider的源码目录下
c. 安装相关的依赖git clone https://github.com/openatx/atxserver2-ios-provider.git
cd /Users/jessietian/Code/UITest/atxserver2-ios-provider
npm install # 安装nodejs相关的依赖
pip3 install -r requirements.txt # 安装python3的相关依赖
2.连接手机后,启动服务:
python3 main.py # 使用默认的atxserver2的地址启动
python3 main.py --server localhost:4000 #启动服务,指定atxserver2地址为:localhost:4000
3.服务启动后,如下图
打开http://localhost:4000/可以看到成功连接的设备
五、遇到的坑
- 在启动iOS-server时出现了wda启动失败的情况:
重新安装了libimobiledevice工具后解决了
- 第一次启动后出现了屏幕无法点击的问题,也是通过重装了libimobiledevice工具后解决了
- 遇到了几次突然wda启动失败的情况(前一天是好的,第二天打开电脑运行就无法启动wda了),也是通过重装了libimobiledevice工具后解决了。
六、总结:首次安装之后,开启服务的步骤
先打开ATX平台(安装docker,docker服务启动后)
cd atx的代码目录 # 进入atx的目录
docker-compose up
在Xcode中打开WDA项目,选择目标设备后Product-Test
- WDA项目在真机上运行成功后,打开终端,转发端口:
iproxy 8100 8100
端口转发成功后启动atxserver2-ios-provider服务
cd atxserver2-ios-provider的代码目录 #进入目录
python3 main.py
在浏览器中输入 http://localhost:4000/devices 查看成功连接的设备
*参考文章
- iOS 真机如何安装 WebDriverAgent:https://testerhome.com/topics/7220
- 关于libimobiledevice的更多芝士:https://www.jianshu.com/p/746f3ddded1f