2015年Facebook 开源了一款 iOS 移动测试框架WebDriverAgent,WebDriverAgent 在 iOS 端实现了一个 WebDriver server ,借助这个 server 我们可以远程控制 iOS 设备。你可以启动、杀死应用,点击、滚动视图,或者确定页面展示是否正确。它通过链接 XCTest.framework 并调用苹果的 API 直接在设备上执行命令。这使得它成为应用程序端到端测试或通用设备自动化的完美工具
wda作为任何UITest的捆绑软件启动,WebDriverAgentRunner作为一个后台应用运行在iOS手机上,
ServerURLHere->http://[SOME_IP]:8100<-ServerURLHere
即在手机上8100端口启动一个HTTP server,内部就是一个死循环,监听网络传输过来的webdriver协议的数据,解析并处理点击事件
但该项目已经存档(archived),不再维护。2019年5月,Facebook开源了IDB,即“ iOS Development Bridge”,这是一个用于使iOS模拟器和设备自动化的命令行界面。他们正在将自己的内部项目从WDA迁移到IDB,并建议将其检查出来作为替代方案
由于facebook wda已经停止维护,现在一般推荐使用fork自 facebook wda的appuim wda
iOS-Tagent也是基于 facebook 的 WebDriverAgent 项目上进行开发的 , 目的是为了对 Airtest Project 提供iOS平台的测试支持,该项目在原项目的基础上进行了定制化的优化和功能调整
XCTestWD是WebDriver server的Swift版本实现,主要用于Macaca自动化项目,这里不做过多介绍,更多可参考官方文档Macaca面向多端的自动化测试
Xcode, xcodebuild 或FBSimulatorControl
brew install libimobiledevice --HEAD
iproxy xxxx yyyy
(本地xxxx端口到设备的yyyy端口)iproxy 8100 8100
,这样就可以通过访问电脑的端口访问到手机的端口了idevicesyslog
ideviceinfo
更多参看libimobiledevice Usage
综上,WDA会在iOS 端实现了一个 WebDriver server,并监听网络传输过来的webdriver协议的数据,通过电脑与手机端口的映射,我们就可以通过电脑发送网络请求到手机上的server,server就能解析并处理点击事件了
因此我们需要做的是安装并启动WDA,设置端口转发。在tidevice出现之前,WDA只能通过xcodebuild来启动,而运行xcodebuild则必须有一台Mac才行。tidevice没有通过xcodebuild,而是通过usbmuxd直接跟手机上的服务进行直接通信完成手机上WDA的启动。usbmux在不同的平台都有开源的实现,所以tidevice不仅能在Mac上运行,也能在Linux、Windows上运行
安装WDA
方法1:(必须mac)将iOS设备与一台Mac连接,然后使用xcode编译源码安装,成功安装WebDriverAgent即可脱离Mac
方法2:使用tidevice的安装命令,将开发者证书重签名的WebDriverAgent.ipa
安装到iOS设备上
运行WDA
tidevice relay 8100 8100
# 运行XCTEST $ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner [I 210127 11:40:23 _device:909] BundleID: com.facebook.wda.WebDriverAgent.Runner [I 210127 11:40:23 _device:911] DeviceIdentifier: 12345678901234567890abcdefg [I 210127 11:40:23 _device:773] SignIdentity: 'Apple Development: -Your-Developer-Name-' [I 210127 11:40:23 _device:840] Launch 'com.facebook.wda.WebDriverAgent.Runner' pid: 239 [I 210127 11:40:23 _device:1003] ProductVersion: 12.4 [I 210127 11:40:24 _device:952] Start execute test plan with IDE version: 29 [I 210127 11:40:24 _device:875] WebDriverAgent start successfully # 修改监听端口为8200, 并显示调试日志 $ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner -e USB_PORT:8200 --debug
# 可通过tidevice applist来获取wda的BundleID # 运行 XCTest 并在PC上监听8200端口转发到手机8100服务 # facebook-wda $ tidevice wdaproxy -B com.facebook.wda.WebDriverAgent.Runner --port 8200 # appium的wda $ tidevice wdaproxy -B com.gameappium.WebDriverAgentRunner.xctrunner --port 8200
可通过在浏览器中访问
http://localhost:8200/status
来查看WDA是否启动成功
Linux和Windows因为默认没有usbmux这个服务,提前安装一下就可以。可以参考这个issue
启动后你就可以使用Appium 或者 facebook-wda 来运行iOS自动化了
更多关于tidevice可参看tidevice
更多知识可关注个人公众号:CodeMonkeyJerry