前言
在群里看到WebDriverAgent这个东西,出于好奇,便开始百度+谷歌,最终对其有了简单的了解。也对自动化测试也有了一个初步的了解。接下来你看到的是对WebDriverAgent的一些介绍。
正文
WebDriverAgent简称WDA。它是由Facebook推出的一款移动端测试框架。它是在iOS客户端实现了一个WebDriver的Server,借助这个server,我们可以远程控制iOS设备进行测试。
它更多的是测试人员进行自动化测试用的,所以在 上有一些文章对其进行了介绍。具体的文章链接可以参见文末的附录。
原理
据官方介绍,它是通过链接XCTest.framework和调用苹果的API直接在设备上执行命令。在网上看到一张图:
先忽略这张图,我们可以先看一个Xcode自带的软件:Accessibility Inspector。直接打开Xcode,然后点击菜单的Xcode-->Open Developer Tool即可找到该软件。这个软件按照名称来理解的话简单可以理解为可用性检查员。通过选择不同的设备(Mac、Simulator、iPhone),可以对其进行检查,例如我直接选择我的mac,然后选择微信那个进程,你会发现该软件的首页是Quicklook,也就是对微信APP的一个概览。你可以点击页面上的类似瞄准器的按钮,当你选中之后,颜色会变成蓝色,这个时候将鼠标移动到微信界面上,你会发现使用它可以检查微信mac版本的各个元素,并且可以查看各个元素的属性,如果该元素具有Actions,你还可以进行点击操作。也就是说你完全不用直接去操作微信,而直接使用Accessibility Inspector进行操作即可。基于此,我们可以利用查看的层级结构,进行UI自动化测试。
对这个的理解我现在只停留在对工具的使用,后续会继续进行学习。
也就是基于Accessibility、XCTest.framework和UIAutomation.framework,才实现了对APP的各种操作,而WDA就是通过在被测设备上安装了WebDriverAgentRunner,然后通过WDA的一些API进行了服务器和客户端交互。基于API进行编写业务测试脚本,最后将脚本运行实现自动化测试的过程。
特性
在WDA的Github上也给出了WDA的特性:
1.支持真机 &&模拟器
在模拟器上运行还是比较方便的,在真机上需要进行证书配置、进行端口转发。这个下面会介绍到。
2.实现了大多数的WebDriver Spec
3.实现了部分Mobile JSON Wire Protocol Spec
如果想进一步了解Mobile JSON Wire Protocol Spec是什么,可以查看附录的1链接
4.支持USB连接设备
USB连接设备的时候,需要代理转发,这里用到了mobiledevice(或者使用usbmuxd)方法很简单直接进行端口代理即可(可参见本条特性的外链)。
5.提供了一个Inspector,可以很直观地查看当前设备的状态以及元素tree。
6.方便上手,它可以直接通过Xcode启动和调试
7.Unsupported yet,but works with tvOS & OS X
安装
WDA的安装很方便,只需要执行下面几个步骤就搞定(前提是你安装了各种环境支持,npm,node,carthage等):
第一步:下载工程,
第二步:在解压后的工程根目录执行下面脚本:
./Scripts/bootstrap.h
该操作会通过Carthage安装所有的依赖、使用npm构建inspector包。
第三步:打开WebDriverAgent.xcodeproj,开启WebDriverAgentRunner test即可。
使用
选中要执行的设备,按照安装的第三步执行,即可启动WDA,执行UITestingUITests,当console输出如下信息则说明启动成功:
2018-06-27 15:56:14.352191+0800 WebDriverAgentRunner-Runner[9119:362446] +[CATransaction synchronize] called within transaction2018-06-27 15:56:14.477644+0800 WebDriverAgentRunner-Runner[9119:362446] Running tests... objc[9119]: Class VCWeakObjectHolder is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AVConference.framework/Frameworks/ViceroyTrace.framework/ViceroyTrace (0x12bfce4d0) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AVConference.framework/AVConference (0x12b0fae38). One of the two will be used. Which one is undefined.2018-06-27 15:56:16.007610+0800 WebDriverAgentRunner-Runner[9119:362446] Continuing to run tests in the background with task ID 1Test Suite 'Selected tests' started at 2018-06-27 15:56:16.612Test Suite 'WebDriverAgentRunner.xctest' started at 2018-06-27 15:56:16.613Test Suite 'UITestingUITests' started at 2018-06-27 15:56:16.613Test Case '-[UITestingUITests testRunner]' started. t = 0.00s Start Test at 2018-06-27 15:56:16.614 t = 0.00s Set Up2018-06-27 15:56:16.617879+0800 WebDriverAgentRunner-Runner[9119:362446] Built at Jun 26 2018 18:43:042018-06-27 15:56:16.708704+0800 WebDriverAgentRunner-Runner[9119:362446] ServerURLHere->http://172.19.156.187:8100<-ServerURLHere
关键是最后一句话,显示了Server 的URL,直接将其拷贝,然后在浏览器打开即可。
地址后面添加/status可以查看当前设备(你使用的哪个设备运行,就是哪个设备的状态)的状态。
地址后添加/inspector即可打开inspector,查看元素,界面如下:
登录 | 立即注册