WebDriverAgent自动化框架

WebDriverAgent是适用于iOS 的WebDriver服务器实现;它允许启动和终止应用程序,点击和滚动视图或确认屏幕上的视图状态。这使其成为应用端到端测试或通用设备自动化的完美工具。它通过链接XCTest.framework和调用Apple的API来直接在设备上执行命令。

安装配置WDA服务端:

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来验证。

Web界面操作

此时打开 http://localhost:8100/inspector, 可以看到一个界面。左边屏幕图像,右边具体的元素信息,用来查看界面都UI图层,方便写测试脚本用。

安装 WDA 客户端:

上面我们在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")

# 打印屏幕方向<PORTRAIT | LANDSCAPE>
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的界面元素并实现操作

发布了71 篇原创文章 · 获赞 34 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/TuGeLe/article/details/85087196