在您点击之后,您将会首先看到如图2所示的登录界面。
图2.登录对话框
程序有了,我们应该如何测试下面这个简单的用例呢?
1、在 CD 列表中选中 CD“Die schone Mullerin, Op. 25”
2、点击“Place Order”按钮
3、验证登录对话框能够正确弹出
回顾我们的问题:
● 如何捕获需要操作的对象?
首先,我们要发现并定位 treeview 控件(包括特定的条目“Die schone Mullerin, Op. 25”)以及名为“Place Order”的按钮。在 Windows 下,我们可以感知每个原生应用程序的控件组织关系,比如一个对话框上有哪些按钮(您可以尝试使用微软的 SPY++ 去观察每个原生程序的窗体结构)。而在 Mac 上,我们只能借助系统的 Accessibility 特性支持发现程序的部分架构,这将受限于程序对 Accessibility 的支持。对于我们来说,最稳妥的解决方法,还是在被测程序中加入一个插件,来直接向我们“汇报”程序的窗体结构和控件信息。
● 如何对捕获到的对象进行操作?
在捕获到 treview 和按钮之后,我们需要模拟用户展开 treeview,点击选取“Die schone Mullerin, Op. 25”条目,再单击“Place Order”按钮。相对而言这一点比较容易实现:我们只需要在系统级别控制住鼠标和键盘输入,并模拟输入对应的事件就可以了。当然,要实现操作的跨平台,我们还需要针对不同的操作系统进行封装。
● 如何验证操作的结果?
在单击“Place Order”按钮之后,我们还需要找到名为“Member Logon”的对话框,并且验证对话框中的子控件的属性(如文字、位置等)是否与我们预期的一致。和第一个问题的答案一样,通过系统框架能够访问的对象信息是非常有限的。当然,对于验证而言,我们还可以通过局部截屏来比较操作结果(实际上,在最开始的时候,我们就是这么做的),不过这么做的局限性非常大。首先,用于截屏的基准测试机器和普通的测试机器需要在许多方面保持一致性,比如分辨率、颜色质量等。另外,图像匹配的效率也不高。最重要的是一旦我们调整了产品里控件对象的形状、位置以及文字等属性,以前所截取的包含这个控件对象的样图将全部作废,必须重新截取,这将使得维护成本大增。所以,最稳妥的方法,依然是通过插件从产品中直接获取信息。