名词简称

前言

关于 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 优秀在哪里呢?

  1. ATX 依赖比较少,安装快,上手也快
  2. 可以测试第三方应用,比如微信,网易新闻之类
  3. 更新方便,可以使用 pip 直接更新应用
  4. 集成图像识别,可以解决仅靠 UI 无法定位识别的问题
  5. 集成测试报告
  6. 由知名企业网易的游戏测试开发团队开发(其实就是我们开发的),可以比 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. 打开网易云音乐
  2. 使用网易通行证帐号登录
  3. 输入用户名密码,确认登录
  4. 进入账户设置,跳转到退出登录按钮
  5. 点击退出登录,并点击确认按钮

相应的代码

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


↙↙↙阅读原文可查看相关链接,并与作者交流