WebDriverAgent是适用于iOS 的WebDriver服务器实现;它允许启动和终止应用程序,点击和滚动视图或确认屏幕上的视图状态。这使其成为应用端到端测试或通用设备自动化的完美工具。它通过链接XCTest.framework和调用Apple的API来直接在设备上执行命令。
1.从github上下载WebDriverAgent代码
git clone https://github.com/facebook/WebDriverAgent
2.使用npm构建Inspector的js包(监控界面)
./Scripts/bootstrap.sh
3.打开WebDriverAgent.xcodeproj并开始WebDriverAgentRunner测试并开始发送请求
4.设置证书,选择你买到的开发者证书帐号。(个人证书也可以)在TARGETS里面选中WebDriverAgentRunner设置好证书
5.Scheme选择WebDriverAgentRunner,运行 Product -> Test(Command + U)
终端运行测试
# 解锁keychain,以便可以正常的签名应用,
PASSWORD="passport"
security unlock-keychain -p $PASSWORD ~/Library/Keychains/login.keychain
# 获取设备的UDID
UDID=$(idevice_id -l | head -n1)
# 运行测试
xcodebuild -project /Users/yourname/WDA/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$UDID" test
端口转发,显示请求操作过程
# 使用--HEAD安装最新版本
$ brew install libimobiledevice --HEAD
$ iproxy 8100 8100
启动测试后控制台界面可以看到设备的 IP 地址:http://xxx.xxx.xxx.xxx:8100。
通过上面给出的 IP地址 和端口,加上/status合成一个url地址。例如 http://xxx.xxx.xxx.xxx/status, 然后浏览器打开。如果出现Success,说明 WDA 安装成功了。也可以通过连接真机端口转发,访问localhost:8100/status来验证。
此时打开 http://localhost:8100/inspector, 可以看到一个界面。左边屏幕图像,右边具体的元素信息,用来查看界面都UI图层,方便写测试脚本用。
上面我们在iOS设备上启动了WDA的服务端。为了运行 Mac OS上的Python脚本,我们需要在 Mac OS 上安装 WDA客户端。
facebook-wda WDA参考,就是 WDA 的 Python 客户端库,通过直接构造HTTP请求直接跟WebDriverAgent通信。
//安装WDA的Python客户端库
pip install --pre facebook-wda
(1)创建客户端
#引入 wda Python库
import wda
#开启HTTP请求与回应的LOG
# wda.DEBUG = True
c = wda.Client('http://localhost:8100')
# http://localhost:8100
c = wda.Client()
(2)客户端初始化
# 打印客户端状态
print c.status()
# 等待客户端启动准备
c.wait_ready(timeout=300) # 等待300s,默认120s
# 按真机Home键
c.home()
# 检查可用性
c.healthcheck()
# 拿到页面数据,并进行格式化XML
c.source()
c.source(accessible=True)
# 截屏,仅支持PNG格式
c.screenshot('screen.png')
(3)打开应用(Session)
s = c.session('com.apple.Preferences')
print s.orientation
s.close()
# 打开Safari网页
s = c.session('com.apple.mobilesafari', ['-u', 'https://www.google.com/ncr'])
print s.orientation
s.close()
(3)应用的操作
# 打印当前的bundleId和sessionId
print s.bundle_id, s.id
# 截图当前APP
s.screenshot().save("s.png")
# 打印屏幕方向
print(s.orientation)
# 旋转屏幕
s.orientation = wda.LANDSCAPE
# 停用App一段时间 5s
s.deactivate(5.0)
# 获取宽度和高度
print(s.window_size())
# 获取屏幕Scale
print(s.scale)
# 模拟点击
s.tap(200, 200)
# 点击
s.click(200, 200)
s.click(0.5, 0.5) # 点击屏幕中心
s.click(0.5, 200) # 点击x中心, y=200
# 双击
s.double_tap(200, 200)
# 滑动
s.swipe(x1, y1, x2, y2, 0.5) # 0.5s
s.swipe_left()
s.swipe_right()
s.swipe_up()
s.swipe_down()
# 点击保持
s.tap_hold(x, y, 1.0)
#隐藏键盘
s.keyboard_dismiss()
(4)查找界面元素
如果元素不存在,就会出现WDAElementNotFoundError
# 判断是否存在对应元素
s(id="URL").exists
# 通过一些条件(如id,name, text)等查找元素
s(id='URL')
s(name='URL')
s(text="URL") # text is alias of name
s(nameContains='UR')
s(label='Address')
s(labelContains='Addr')
s(name='URL', index=1) # find the second element. index starts from 0
# 重合使用条件查找
s(className='Button', name='URL', visible=True, labelContains="Addr")
#更强大的寻找方法
s(xpath='//Button[@name="URL"]')
(5)寻找元素并操作
s(text='Dashboard').tap()
# 或者
s(text='Dashboard').get().tap()
(1)根据上面提供的API,创建并编写xxx.py的脚本文件
(2)执行脚本
python xxx.py
1.写以下脚本文件运行
# 解锁keychain,以便可以正常的签名应用,
PASSWORD="xxx"
security unlock-keychain -p $PASSWORD ~/Library/Keychains/login.keychain
# 获取设备的UDID
UDID=$(idevice_id -l | head -n1)
# 真机运行测试
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$UDID" test
2.配置手机端口转发
iproxy 8100 8100
3.运行 WDA 客户端脚本
python xxx.py
可以实现包括点击Home键,打开系统应用,操作系统界面的功能;
可以通过值和id等多个条件查找界面中的元素;
可以通过Web的Inspector界面进行脚本调试,以及坐标及元素获取;
可以通过脚本实现自动化,并且能够运用于持续集成
配置较复杂,因为是基于XCTest的,所以需要通过真机连接Mac电脑,然后启动xcode的test运行;
需要安装python库,通过编写Python脚本来运行,否则只能通过修改WebDriverAgent工程的TEST源码来实现;
不能够寻找iOS Extension的界面元素并实现操作