四、 iOS设备连接
1. iOS-Tagent介绍
iOS-Tagent 是基于 facebook 的 WebDriverAgent, 项目上进行开发的 , 目的是为了对 AirtestProject 提供iOS平台的测试支持,在原项目的基础上进行了定制化的优化和功能调整。
如果需要使用airtest项目对iOS平台进行测试,请 事先准备一台macOS ,使用xcode部署 iOS-Tagent 成功后,能够在mac或windows机器上连接到iOS手机。我们可以点击 链接 下载项目代码到本地进行部署。
这个项目在如下版本上进行了开发和测试:
iOS-Tagent | 最低支持 | 最高支持 |
---|---|---|
iOS系统 | 9.3 | 15.4 |
xcode版本 | 9.9 | 13.3 |
值得注意的是,airtest1.2.5及以上版本,或者是AirtestIDE1.2.14及以上版本,我们不仅兼容了高版本的iOS系统和xcode,而且优化了iOS设备的点击和滑动速度,所以我们非常建议同学们使用我们的 ios-tagent 来对你的真机进行调试。
另外,自Airtest1.1.8起,我们同步支持了 Appium 的 WebDriverAgent工具 ,所以同学们既可以使用 Appium 的 WebDriverAgent
工具来部署 iOS 真机,也可以使用我们 Airtest 底下的 iOS-Tagent
工具来部署 iOS 真机,非常灵活。
关于如何安装 appium 的 WebDriverAgent
教程,我们推荐以下几篇教程:
- Appium 的
WebDriverAgent
工具 - 安装资料:https://testerhome.com/topics/7220 - Facebook 的
WebDriverAgent
工具 - 安装资料:https://testerhome.com/topics/10463 - Appium 的
WebDriverAgent
工具 - 疑难解决:https://github.com/appium/WebDriverAgent/issues - Facebook 的
WebDriverAgent
工具 - 疑难解决:https://github.com/facebookarchive/WebDriverAgent/issues
如果同学们选择在 iOS 真机上安装 appium 的 WebDriverAgent
工具,按上述教程安装好以后,现在同样支持使用我们的 AirtestIDE 连接这台 iOS 设备:
提示
在真机上部署appium的wda,然后使用1.2.8及以上版本的AirtestIDE连接该iOS设备,并不会影响Airtest和Poco相应功能的使用,与iOS-Tagent项目一致;但可能存在iOS卡顿较严重的情况,暂无优化方案。
2. Airtest Api 支持状况
经过改进,iOS-Tagent 可以与 AirtestIDE 和 airtest项目 协同工作。
支持通用的 airtest 的 iOS Api
- start_app: OK
- stop_app: OK
- snapshot: OK
- home: OK
- touch: OK
- swipe: OK
- text: OK
- wait: OK
- exists: OK
- find_all: OK
- assert_exists: OK
- assert_not_exists: OK
除了一些例外:
- wake: 暂未支持 (考虑用'home'方法替代)
- keyevent: 只支持 'home' 事件
- clear_app: 暂未支持
- install: 暂未支持
- uninstall: 暂未支持
3. 使用Poco快速查看窗口视图
现在已经支持Poco查看窗口视图功能,可以看下面图片的效果
这个功能可以与 Poco 和 AirtestIDE 一同使用达到最好的效果。
请注意,若只部署了wda项目,是无法使用本功能的,请务必确保部署的是我们提供的 iOS-Tagent 项目或者是我们已经兼容的appium的 wda 。
poco仅支持本地iOS设备
需要注意的是,在IDE上查看iOS设备的控件树,目前仅支持本地连接的iOS设备,不支持远程iOS设备。
4. iOS部署流程
1)安装启动iOS-Tagent
在手机上创建一个WebDriver服务器,可用于远程控制iOS设备,定位UI元素
a 下载 iOS-Tagent 到本地电脑
git clone git@github.com:AirtestProject/iOS-Tagent.git
b 使用Xcode打开 iOS-Tagent, 用数据线连接iPhone至Mac
选择项目,在菜单栏
product
->Scheme
->WebDriverAgentRunner
选择设备,在菜单栏
product
->Destination
-> 选择你的真机选择设备之后,还需要注意按提示登录开发者账号,并在
Build Settings
中设置bundleID
为唯一值。c 启动Test,在菜单栏
product
->Clean Build Folder
之后,再product
->Test
启动。当你看到这样的日志的时候,代表 iOS-Tagent 已经启动成功了
Test Suite 'All tests' started at 2017-01-23 15:49:12.585
Test Suite 'WebDriverAgentRunner.xctest' started at 2017-01-23 15:49:12.586
Test Suite 'UITestingUITests' started at 2017-01-23 15:49:12.587
Test Case '-[UITestingUITests testRunner]' started.
t = 0.00s Start Test at 2017-01-23 15:49:12.588
t = 0.00s Set Up
可以从以下了解更多的关于如何成功启动这个项目的方法 here和 here
2)设置代理
iproxy 可以把iPhone端口映射到电脑端口,那么就可以通过访问电脑的端口访问到手机的端口了。
一般情况下,需要通过设置usb代理的方式访问手机上的Agent,直接通过wifi对手机进行访问可能会出现问题,具体的原因可以参考 Issues 和 detail
a 通过 Homebrew 安装iproxy
$ brew install libimobiledevice
b 运行iproxy
$ iproxy 8100 8100
启动成功后,可以试着在浏览器访问 http://127.0.0.1:8100/status ,如果访问成功并且可以看到一些json格式的手机信息,即表示启动成功。
有一点需要 注意 的,iproxy只能监听localhost,所以如果你想使用 Windows 连接iPhone,可以改用 wdaproxy。具体步骤为:
- 使用usb数据线连接iPhone至Mac
- 在Mac上运行 wdaproxy,wdaproxy可以把iPhone端口映射到Mac端口,具体安装运行步骤可参考 https://github.com/openatx/wdaproxy
- 在Windows上的AirtestIDE iOS地址输入框,输入Mac的ip地址和端口,点击”connect”按钮
提示
使用wdaproxy代理的iOS设备,在IDE连接上真机之后,将无法查看iOS的控件树,因不属于本地设备。
3)连接AirtestIDE
通过ip方式连接iPhone,实时刷新界面,可进行UI测试
完成上面两个步骤后,就可以在AirtestIDE的iOS地址栏填入地址 http://127.0.0.1:8100 ,点击 “connect” 连接设备,开始编写你的Airtest测试脚本了
5. iOS连接的 Q & A
我们猜测你在部署过程中会遇到很多问题,所以整理了一份 Q&A,你可以先看看,如果对于这个项目有问题和反馈建议,也欢迎到Issues里进行提出.
1)Xcode版本和iOS版本对应问题
2)申请开发者证书
3)登陆开发者账号
4)设置开发者证书
5)Xcode failed to create provisioning profile
6)第一次安装,信任设备
6. 脱离xcode启动wda的tidevice
阿里开源了1个用来做iOS自动化的工具— tidevice ,该工具能实现 不依赖 xcode 启动 WebDriverAgent 完成设备连接。
意思是,当我们在iOS真机上安装了 WebDriverAgent (比如iOS-Tagent、appium的wda)之后,我们就不需要依赖Mac上面的xcode来启动 WebDriverAgent了,用 Windows也可以启动苹果设备上的 WebDriverAgent 了。
使用tidevice启动WebDriverAgent,然后用AirtestIDE连接iOS真机的详细教程可以参考:脱离Mac搞iOS自动化,tidevice工具教你轻松实现! 。
7. iOS-Tagent的 License
iOS-Tagent 基于WebDriverAgent 进行了定制化的开发和优化:
WebDriverAgent is BSD-licensed. We also provide an additional patent grant.
Have fun with Airtest!