WDAfacebookwda在2015年,Facebook开源了一个iOS移动测试框架WebDriverAgent,它在iOS端实现了一个WebDriver服务器,通过它我们可以远程控制iOS设备。您可以启动、终止应用程序、单击、滚动视图或确保页面正确显示。它通过链接XCTest.framework并调用Apple的API直接在设备上执行命令。这使它成为应用程序端到端测试或通用设备自动化的完美工具wda作为与任何UITest的捆绑包启动,WebDriverAgentRunner在iOS手机上作为后台应用程序运行,ServerURLHere->http://[SOME_IP]:8100<-ServerURL这里是在手机上的8100端口启动一个HTTP服务器。里面是一个死循环,监听网络传过来的webdriver协议的数据,解析处理点击事件,不过项目已经存档,不再维护。2019年5月,Facebook开源了IDB或“iOS开发桥”,这是一个用于自动化iOS模拟器和设备的命令行界面。他们正在将自己的内部项目从WDA迁移到IDB,并建议将其作为替代appiumwda检查出来,因为facebookwda已停止维护,现在通常建议使用appuimwdaairtestwdaiiOS-Tagent,它是facebookwda的一个分支也是基于facebook的WebDriverAgent项目开发的,目的是为Airtest项目提供iOS平台的测试支持。本项目在原有项目的基础上进行了定制化优化和功能调整。XCTestWDXCTestWD是WebDriver服务器的Swift版本,主要用于Macaca自动化项目,这里不做过多介绍。更多信息请参考官方文档Macaca面向多终端的自动化测试。wda的安装和启动安装:可以参考各自官方的指导,比如iOS-Tagent的安装,如何在iOS真机上安装WebDriverAgent启动方法:facebookwdastartup方法可以参考StartingWebDriverAgent,Xcode,xcodebuild或FBSimulatorControlappiumwda。启动方法请参考AppiumXCUITestDriverRealDeviceSetup。usbmux、libimobiledevice、usbmuxd和libusbmux是Apple的专有协议。Apple为自己的macOSAPP设计了这个协议来与iDevice进行通信。通信,从而实现iTunes备份iPhone、Xcode真机调试等功能libimobiledevice是一个使用原生协议与AppleiOS设备进行通信的库。它可以将iPhone的端口映射到电脑的端口,然后就可以通过电脑的端口访问手机了。libimobiledevice底层使用usbmuxd,usbmuxd(USBmultiplexingdaemon)是一个跨平台的scoketdaemon进程,与iOS设备多路复用连接。tcp转换服务,客户端根据usb相关协议,将请求包发送给usbmuxd进程,通过usbmuxd转发给对方设备,实现tcp连接。下层使用libusbmuxd。更多详情,请点击查看项目中的介绍。安装libimobiledevicebrewinstalllibimobiledevice--HEADlibimobiledevice常用命令端口转发:iproxyxxxxyyyy(本地xxxx端口到设备yyyy端口)比如映射本地端口8100到设备端口8100为iproxy81008100,这样就可以访问手机的端口了通过访问计算机的端口来拨打电话。查看设备系统日志idevicesyslog,查看连接设备的信息。服务器,监听网络传来的webdriver协议数据。通过电脑和手机端口的映射,我们可以通过电脑向手机上的服务器发送网络请求,服务器可以解析处理点击事件tidevice,所以我们需要做的是安装并启动WDA,设置端口转发。在tidevice出现之前,WDA只能通过xcodebuild启动,需要一台Mac才能运行xcodebuild。Tidevice不通过xcodebuild,而是直接通过usbmuxd与手机端的服务通信,完成WDA在手机端的启动。usbmux在不同平台都有开源实现,所以tidevice不仅可以在Mac上运行,还可以在Linux和Windows上运行安装WDA方法一:(需要Mac)将iOS设备连接到Mac,然后使用xcode编译源码安装,WebDriverAgent安装成功,可以离开Mac方法二:在iOS设备上使用tidevice安装命令安装开发者证书重签的WebDriverAgent.ipa,运行WDAtidevicerelay将请求转发到手机端,类似于iproxy,例如tideevicerelay81008100tidevicexctest,运行xctest#RunXCTEST$tidevicexctest-Bcom.facebook.wda.WebDriverAgent.Runner[I21012711:40:23_device:909]BundleID:com.facebook.wda。WebDriverAgent.Runner[I21012711:40:23_device:911]DeviceIdentifier:12345678901234567890abcdefg[I21012711:40:23_device:773]SignIdentity:'AppleDevelopment:-Your-Developer-Name-'[I21012711:40:234_device:com.facebook.wda.WebDriverAgent.Runner'pid:239[I21012711:40:23_device:1003]ProductVersion:12.4[I21012711:40:24_device:952]使用IDE版本开始执行测试计划:29[I21012711:40:24_device:875]WebDriverAgent启动成功#修改监听端口为8200,并显示调试日志$tidevicexctest-Bcom.facebook.wda.WebDriverAgent.Runner-eUSB_PORT:8200--debugtidevicewdaproxy命令,wdaproxy命令会同时调用xctest和relay命令,wda退出时会自动重启xctest#可以通过tideviceapplist获取wda的BundleID#运行XCTest并监听8200在PC端口转发到手机8100服务#facebook-wda$tidevicewdaproxy-Bcom.facebook.wda.WebDriverAgent.Runner--port8200#wda$tideevicewdaproxy-Bcom.gameappium.WebDriverAgentRunner.xctrunner--port8200forappium可以通过浏览器访问http://localhost:8200/status查看WDA是否启动成功Linux和Windows因为默认没有usbmux服务,可以参考这个issue提前安装好然后你可以使用Appium或者facebook-wda来运行iOS自动化,关于tidevice的更多信息请参考tidevice参考和扩展阅读WebDriverAgent(WDA)配置和使用以及源码分析usbmux协议分析了解更多知识edge,请关注个人公众号:CodeMonkeyJerry
