WebDriverAgent入门篇-安装和使用

前言

在群里看到WebDriverAgent这个东西,出于好奇,便开始百度+谷歌,最终对其有了简单的了解。也对自动化测试也有了一个初步的了解。接下来你看到的是对WebDriverAgent的一些介绍。node

正文

WebDriverAgent简称WDA。它是由Facebook推出的一款移动端测试框架。它是在iOS客户端实现了一个WebDriver的Server,借助这个server,咱们能够远程控制iOS设备进行测试。
它更多的是测试人员进行自动化测试用的,因此在 testerhome 上有一些文章对其进行了介绍。具体的文章连接能够参见文末的附录。python

原理

据官方介绍,它是经过连接XCTest.framework和调用苹果的API直接在设备上执行命令。在网上看到一张图:
图片来源于网络
先忽略这张图,咱们能够先看一个Xcode自带的软件:Accessibility Inspector。直接打开Xcode,而后点击菜单的Xcode-->Open Developer Tool便可找到该软件。这个软件按照名称来理解的话简单能够理解为可用性检查员。经过选择不一样的设备(Mac、Simulator、iPhone),能够对其进行检查,例如我直接选择个人mac,而后选择微信那个进程,你会发现该软件的首页是Quicklook,也就是对微信APP的一个概览。你能够点击页面上的相似瞄准器的按钮,当你选中以后,颜色会变成蓝色,这个时候将鼠标移动到微信界面上,你会发现使用它能够检查微信mac版本的各个元素,而且能够查看各个元素的属性,若是该元素具备Actions,你还能够进行点击操做。也就是说你彻底不用直接去操做微信,而直接使用Accessibility Inspector进行操做便可。基于此,咱们能够利用查看的层级结构,进行UI自动化测试。ios

更多的关于Accessibility能够参见iOS Accessibility Tutorial。对这个的理解我如今只停留在对工具的使用,后续会继续进行学习。git

也就是基于Accessibility、XCTest.framework和UIAutomation.framework,才实现了对APP的各类操做,而WDA就是经过在被测设备上安装了WebDriverAgentRunner,而后经过WDA的一些API进行了服务器和客户端交互。基于API进行编写业务测试脚本,最后将脚本运行实现自动化测试的过程。github

特性

在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 Xweb

安装

WDA的安装很方便,只须要执行下面几个步骤就搞定(前提是你安装了各类环境支持,npm,node,carthage等):
第一步:下载工程,下载连接点这里
第二步:在解压后的工程根目录执行下面脚本:shell

./Scripts/bootstrap.h

该操做会经过Carthage安装全部的依赖、使用npm构建inspector包。
第三步:打开WebDriverAgent.xcodeproj,开启WebDriverAgentRunner test便可。npm

使用

选中要执行的设备,按照安装的第三步执行,便可启动WDA,执行UITestingUITests,当console输出以下信息则说明启动成功:json

2018-06-27 15:56:14.352191+0800 WebDriverAgentRunner-Runner[9119:362446] +[CATransaction synchronize] called within transaction
2018-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 1
Test Suite 'Selected tests' started at 2018-06-27 15:56:16.612
Test Suite 'WebDriverAgentRunner.xctest' started at 2018-06-27 15:56:16.613
Test Suite 'UITestingUITests' started at 2018-06-27 15:56:16.613
Test Case '-[UITestingUITests testRunner]' started.
    t =     0.00s Start Test at 2018-06-27 15:56:16.614
    t =     0.00s Set Up
2018-06-27 15:56:16.617879+0800 WebDriverAgentRunner-Runner[9119:362446] Built at Jun 26 2018 18:43:04
2018-06-27 15:56:16.708704+0800 WebDriverAgentRunner-Runner[9119:362446] ServerURLHere->http://172.19.156.187:8100<-ServerURLHere

关键是最后一句话,显示了Server 的URL,直接将其拷贝,而后在浏览器打开便可。
地址后面添加/status能够查看当前设备(你使用的哪一个设备运行,就是哪一个设备的状态)的状态。
地址后添加/inspector便可打开inspector,查看元素,界面以下:

到这里,你就能够按照WDA提供的API进行脚本编写了,API地址为https://github.com/facebook/WebDriverAgent/wiki/Queries 。里面有不少命令,按照命令便可编写shell脚本进行自动化测试。例如从APP中回到主屏幕的操做(至关于点击了home button):bootstrap

curl -X POST -H "Content-Type: application/json" -d "" http://localhost:8100/wda/homescreen

能够先看一下API提供的语句:

curl -X GET $JSON_HEADER $DEVICE_URL/status

其中:
$JSON_HEADER表明:' -H "Content-Type: application/json" '
$DEVICE_URL表明刚才的ServerURL。
可是这种方式写起来比较麻烦,在网上又进行了查找,最终发现了facebook-wda非官方提供,可是很好用,安装方式也比较简单,直接执行命令(前提是安装了python以及pip):

pip install --pre facebook-wda

而后就可使用python进行脚本编写:

#coding:utf-8
import wda
driver = wda.Client('http://172.13.156.187:8100')
# setting_session = driver.session('com.apple.Preferences')
# setting_session(text=u'通用',className='Cell').tap()
#点击home button
driver.home()

这样写起来看着就比较方便了。简单作一个对比:

WDA提供的API操做有不少,直接查看相关文档便可。另外,当时风靡一时的跳一跳python脚本执行,就是基于WDA进行的。想本身尝试的能够查看附录2连接。亲测可用。有一点须要注意的是在wechat_jump_game项目中,你要把对应的config.json文件拷贝到这个根目录,这样wecaht_jump_auto_iOS.py脚本才能够读到这个配置。

结束语

WDA的使用还有不少方面,网易游戏团队ATX测试框架进行iOS测试就是使用的WDA,另外比较知名的appium也采用的WDA。有兴趣能够对其进行研究学习。
在学习的过程当中发现了testerhome这个网站,应该是QA同窗比较钟爱的网站,里面有各类文章以及问答,大多数都是关于测试技术相关,强烈推荐给QA同窗。

附录

1.做为移动测试人员,你应该知道的移动自动化测试协议 Mobile JSON Wire Protocol Specification
2.基于python+WebDriverAgent的跳一跳小程序高分教程
3.iOS测试 WebDriverAgent简介
4.iOS自动化实践——WebDriverAgent(一)
5.iOS自动化实践——WebDriverAgent(二)

6.iOS自动化实践——WebDriverAgent(三)

相关文章
相关标签/搜索