一、系统环境准备

大部分环境在ATX环境搭建时已经安装过了

  1. Xcode(Version 11.3.1 (11C504))(版本只做参考,不用完全一样)
  2. Python3.7 8
  3. 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的目录下,运行初始化脚本

  1. git clone https://github.com/appium/WebDriverAgent # 下载代码
  2. cd /Users/jessietian/Code/UITest/WebDriverAgent
  3. brew install carthage # 下载carthage
  4. ./Scripts/bootstrap.sh #该脚本会使用Carthage下载所有的依赖,使用npm打包响应的js文件

4. 打开WDA

初始化项目后,双击目录中的 WebDriverAgent.xcodeproj 文件双击,打开Xcode.
a.配置开发者证书
安装到真机上都需要苹果证书,使用企业证书或者个人证书安装
如下图,依次点击文件-项目名-webDriverAgentRunner-Signing&Capabilities-选择证书
image.png
b. 运行测试
如下图,在第一个红框位置选择运行的项目:WebDriverAgentRunner,第二个红框位置选择自己已链接的手机
image.png
选择后,选择Product-Test运行
image.png
c. 检查运行结果
在手机上会出现一个无图标的应用:WebDriverAgent,点击打开这个应用后会出现黑屏后关闭了应用。这个是正常现象。
打开xcode的控制台界面,可以看到当前链接设备的IP地址,如下:
image.png
将上图中的iP地址后面添加 /status 后,如:http://192.168.1.5:8100/status,在浏览器中打开,出现Json输出的页面,说明WDA成功了

5. 遇到的坑

  1. 运行代码出现了如下缺少模块无法build的情况image.png

这个问题在代码环境什么都没有改动的时候就出现了(也可能是不小心动了什么环境引起的),原因:wda项目在Xcode中在找某个框架的路径出现了问题,解决方法:在Library Search Paths 里面加入 $(SRCROOT)/**.framework
image.png
b. 一般手机在浏览器中输入ip地址都无法看到json输出的页面,因为有些国产的iPhone机器通过手机的IP和端口还不能访问,需要将端口转发到mac本地。使用命令:

  1. iproxy 8100 8100 # 表示将当前连接设备的8100端口(第二个8100表示设备端口)映射到电脑的8100端口(第一个8100),如果想和设备8100端口通信,直接和本地的8100端口通信就可以了。

出现waiting for connection时,在浏览器中直接输入:http://localhost:8100/ 即可,出现以下显示就是成功链接了:
image.png
c. 在转发端口时会链接出错的情况:
image.png
是由于出现了多个设备(为啥出现多个设备还不清楚原因),在转发时指定设备号就可以解决了。

  1. iproxy 8100 8100 a68ef80417c299f32960df6197035e358a0e349b # 有时会出现有多个设备转发端口会发生错误,在最后加上需要转发设备的设备号就可以成功转发了

获取设备号的方法之一:打开Xcode,点击设备
image.png
下拉列表中选择添加模拟器选项
image.png
弹出窗口中选择需要查看的指定手机的identifier,双击复制即可
image.png

三、安装libimobiledevice工具包

libimobiledevice 是一个使用本机协议与Apple iOS设备的服务进行通信的库。支持 iPhone®, iPod Touch®, iPad® and Apple TV® 等设备的通讯协议。应用软件可以通过这个开发包轻松访问设备的文件系统、获取设备信息,备份和恢复设备,管理 SpringBoard 图标,管理已安装应用。
打开终端直接安装,命令如下

  1. brew uninstall --ignore-dependencies libimobiledevice
  2. brew uninstall --ignore-dependencies usbmuxd
  3. brew install --HEAD usbmuxd
  4. brew unlink usbmuxd
  5. brew link usbmuxd
  6. brew install --HEAD libimobiledevice
  7. brew install ideviceinstaller
  8. brew link --overwrite ideviceinstaller

四、设备连接

  1. 部署服务(MacOS和Windows环境下只能使用源码部署,如下; Linux环境下可以使用docker部署)
    a. 从git拉取源码:https://github.com/openatx/atxserver2-ios-provider.git
    b. 打开终端进入到atxsertver2-iOS-provider的源码目录下
    c. 安装相关的依赖
    1. git clone https://github.com/openatx/atxserver2-ios-provider.git
    2. cd /Users/jessietian/Code/UITest/atxserver2-ios-provider
    3. npm install # 安装nodejs相关的依赖
    4. pip3 install -r requirements.txt # 安装python3的相关依赖

2.连接手机后,启动服务:

  1. python3 main.py # 使用默认的atxserver2的地址启动
  2. python3 main.py --server localhost:4000 #启动服务,指定atxserver2地址为:localhost:4000

3.服务启动后,如下图
image.png
打开http://localhost:4000/可以看到成功连接的设备
image.png

五、遇到的坑

  1. 在启动iOS-server时出现了wda启动失败的情况:

image.png
重新安装了libimobiledevice工具后解决了

  1. 第一次启动后出现了屏幕无法点击的问题,也是通过重装了libimobiledevice工具后解决了
  2. 遇到了几次突然wda启动失败的情况(前一天是好的,第二天打开电脑运行就无法启动wda了),也是通过重装了libimobiledevice工具后解决了。

六、总结:首次安装之后,开启服务的步骤

  1. 先打开ATX平台(安装docker,docker服务启动后)

    1. cd atx的代码目录 # 进入atx的目录
    2. docker-compose up
  2. 在Xcode中打开WDA项目,选择目标设备后Product-Test

  3. WDA项目在真机上运行成功后,打开终端,转发端口: iproxy 8100 8100
  4. 端口转发成功后启动atxserver2-ios-provider服务

    1. cd atxserver2-ios-provider的代码目录 #进入目录
    2. python3 main.py
  5. 在浏览器中输入 http://localhost:4000/devices 查看成功连接的设备

*参考文章

  1. iOS 真机如何安装 WebDriverAgent:https://testerhome.com/topics/7220
  2. 关于libimobiledevice的更多芝士:https://www.jianshu.com/p/746f3ddded1f