WebDriverAgent
在 iOS 端实现了一个 WebDriver server ,借助这个 server 我们可以远程控制 iOS 设备。你可以启动、杀死应用,点击、滚动视图,或者确定页面展示是否正确。
项目地址:https://github.com/facebook/WebDriverAgent
facebook-wda
这个Python库,通过直接构造HTTP请求直接跟WebDriverAgent通信。
项目地址:https://github.com/openatx/facebook-wda
安装WebDriverAgent
从github上下载代码
1
|
git clone https://github.com/facebook/WebDriverAgent
|
安装依赖
1
|
./Scripts/bootstrap.sh
|
WebDriverAgent使用的是 Carthage 来管理依赖的,所以你需要安装Carthage
环境。
配置好证书,然后Command+U
运行,不是Command+R
。
如果想用USB通信的话看这里 https://github.com/facebook/WebDriverAgent/wiki/USB-support
正常启动后效果如图:
输出你手机ip地址说明正常启动了。
访问 http://ip:8100/inspector 可以看到App的UI图层,方便写测试脚本。
安装facebook-wda
1
|
pip install --pre facebook-wda
|
小试牛刀:完成App自动下载,安装
(先取消Touch ID安装App)
利用Safari跳转App在AppStore页面
1
2
3
4
5
6
7
|
app_url = ‘https://itunes.apple.com/cn/app/id425349261?mt=8‘
c = wda.Client(‘http://ip:8100‘)
# 打开safari
s = c.session(‘com.apple.mobilesafari‘, [‘-u‘, app_url])
e = s(name=u‘打开‘).get(timeout=10, raise_error=False)
e.tap()
time.sleep(5)
|
下载App
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
s = c.session()
if s(className=‘Button‘, name=u‘获取‘).wait(timeout=10, raise_error=False):
# 以前没有下载过
print(‘点击获取‘)
e = s(className=‘Button‘, name=u‘获取‘).get(timeout=2, raise_error=False)
e.tap()
# 等待显示安装
e = s(className=‘Button‘, name=u‘安装‘).get(timeout=30, raise_error=False)
if e:
e.tap()
print(‘是否需要输入密码‘)
if s(className="SecureTextField").wait(timeout=5, raise_error=False):
print(‘输入密码‘)
e = s(className="SecureTextField").get(timeout=5, raise_error=False)
e.set_text("password")
print(‘点击登录‘)
e = s(className=‘Button‘, name=u‘登录‘).get(timeout=5, raise_error=False)
e.tap()
else:
print(‘不需要输入密码‘)
elif s(className=‘Button‘, name=u‘重新下载‘).wait(timeout=5, raise_error=False):
print(‘点击重新下载‘)
e = s(className=‘Button‘, name=u‘重新下载‘).get(timeout=10, raise_error=False)
e.tap()
else:
exit()
|
显示下载进度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 有个载入的过程
while s(className=‘Button‘, name=u‘正在载入‘).wait(timeout=3, raise_error=False):
pass
# 隔3秒检查有没有下载完成
print(‘等待下载完成‘)
while s(className=‘Button‘, name=u‘正在下载‘).wait(timeout=3, raise_error=False):
value = s(className=‘Button‘, name=u‘正在下载‘).get(timeout=3, raise_error=False).value
if value is None:
continue
sys.stdout.write("已下载%s\r" % value.encode("utf-8"))
sys.stdout.flush()
time.sleep(1)
sys.stdout.write("已下载100%\r")
sys.stdout.flush()
# 下载完成
print(‘\n下载完成‘)
|
保存文件为 Test_Demo.py ,运行测试
1
2
3
4
5
|
$ python Test_Demo.py
点击重新下载
等待下载完成
已下载100%
下载完成
|
小结
通过使用WebDriverAgent
和facebook-wda
能测试任何App(也可以制作简单的App辅助工具,例如最近比较火的跳一跳)。