关于 iOS 的自动化可用的框架不是很多,黑盒的更少,不过好在还是可以搞的,除了苹果自动的 UIAutomation,另外一个新出的测试框架就是 WebDriverAgent(由鼎鼎大名的 Facebook 出品)。目前只开放出来了 HTTP 的请求协议,Client 库的代码都需要自己实现,但这难不倒我们。
经过一段时间的努力,纯 python 版的 WDA 库就被我们写出来了。
目前项目的地址 https://github.com/openatx/facebook-wda
Balabala 这么久,可能更多的人还是更关心怎么使用吧。道路稍微有点艰辛,不过比 Appium 的 iOS 自动化要简单的多。
可能还是有人会问 ATX 跟 Appium 到底什么关系,我负责任的说,没有任何关系,这是两个不同的测试框架,ATX 是用 Python 写的,而 Appium 主要是 Nodejs 写的。当然区别不止这么点。
那 ATX 比 Appium 优秀在哪里呢?
你一定需要一台 mac,因为还需要 xcode,最好不要用黑苹果,比起解决黑苹果遇到的问题所花的时间,你还不如直接弄台 mac 呢。
WDA 支持模拟器和真机,你若是能把真机的安装搞定了,模拟器肯定也是没问题的。
iPhone 手机不需要越狱,所以用自己的手机就可以。
Mac 上的软件最好全部用 brew 安装,省心省力。
请根据 https://github.com/facebook/WebDriverAgent 上的描述,将 WebDriverAgent 安装到手机上,直到发现手机上多了一个名叫 WebDriverAgent 的 App,就说明安装成功了。熟话说一张图片胜千言,如果是一张 gif 图,是不是就天下无敌了。WDA 的启动方式参考我的截图
命令行的话可以用这个命令
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$(idevice_id -l)" test
$(idevice_id -l)
是为了方便获取连接手机的 UDID 的一种简写
随后打开 127.0.0.1:8100/inspector 这个地址,就可以看到一个酷炫的界面(我来截个图)
左边屏幕图像,右边具体的元素信息,所有这些东西都是我们写脚本的时候需要用到的。
下面需要安装 python 库 atx,还有一些额外的依赖需要安装在 mac 上,直接参考 github 上的指引比较好一些。指引我也是花了不少时间去写的。
https://github.com/codeskyblue/AutomatorX
最后要说的是输入法,测试之前需要将输入法却换到系统默认的英文输入法。某狗输入法是不可以的。
一切就绪后我们就可以开始写脚本了
首先要知道应用的 bundle_id,如果不知道,可以使用命令 ideviceinstaller -l 获取所有已安装的应用,进而把应用的 bundle_id 查出来。
com.netease.cloudmusic, "464", "网易云音乐"
脚本其实很好写,来段很简单的代码,用来测试下 WDA 是否正常工作了
# coding: utf-8
import atx
d = atx.connect('http://localhost:8100', 'com.netease.cloudmusic')
print d.status()
这里我们把 DEVICE_URL 写成了 localhost:8100,如果是真机的话,需要根据实际情况改成对应的手机 IP 和 Port。
下面我们使用脚本来完成一个 账户登录登出的例子,将其具体化成以下几步
相应的代码
1 import atx
2 d = atx.connect('http://localhost:8100', platform='ios')
3 d.start_app('com.netease.cloudmusic')
4 d(text=u'网易邮箱').click()
5 d(xpath=u"//TextField").set_text("someone@163.com\n")
6 d(xpath=u"//SecureTextField").set_text("password")
7 d(text=u'登录').click()
8 d(text=u'帐 号').click()
9 d(text=u'退出登录').scroll().click()
10 d(text=u'确定').click()
有几行需要特殊说明下
因为 ATX 集成了测试报告,所以生成响应的测试报告也很简单
在第 3 行代码之后加入以下代码
from atx.ext.report import Report
rp = Report(d)
rp.patch_wda()
再次运行一遍代码,在当前目录下就可以看到一个 report 目录,里面有一个 index.html,用浏览器打开,效果如下,这里为了方便说明,只截了几个图(实际的报告也比这个详细点)
到这里,介绍就结束了。如果你真的打算做自动化,可能还需要看更多的资料,不要担心,不要害怕,虽然成功的道路有一些坎坷,但成功的喜悦也难以忘怀。
Author: hzsunshx 2016-08-10