像用户使用软件一样享受自动化测试
作者:网络转载 发布时间:[ 2013/2/5 14:54:57 ] 推荐标签:
这种超级清晰、简短的测试脚本与实际海量的页面源码之间有一条鸿沟,我们可以通过“封装”来屏蔽。下面以ExtJS的Button控件为例来示意如何完成这种封装:
● Button的界面展现如下:

● 实际生成的页面源码DOM结构如下(省略部分非关键属性):
<div id="button-1032" class="x-btn x-box-item x-btn-default-small
x-noicon x-btn-noicon >
<em id="button-1032-btnWrap">
<button id="button-1032-btnEl" class="x-btn-center"
autocomplete="off" role="button">
<span id="button-1032-btnInnerEl">Cancel
<span id="button-1032-btnIconEl" class="x-btn-icon "/>
</button>
</em>
</div>
我们封装所要做的主要工作是解析出测试脚本中定义的关键信息(button、保存、click),结合对应页面源码的DOM结构,翻译成W3C标准的定位方式(如,XPath)。通过XPath可以定位到页面上的任何控件。
对于测试脚本(<event id="[button]Cancel" name="click"/>),翻译后的XPath可以是(//button/span[text()='Cancel'])。
同理,其它测试脚本还可以包括:
● 树节点展开/关闭
<event id="[treeNode]部门" name="open"/>
<event id="[treeNode]部门" name="close"/>
● Grid翻页
<event id="[grid]人员列表" name="nextPage"/>
它们的封装实现比Button稍微复杂一些,但原理是一样的。
(三)增强测试脚本浏览器兼容性的实现思路
这个比较简单了,只要选用标准化程度高、厂商支持度高、扩展性强的第三方底层实现即可,笔者推荐采用Selenium WebDriver。
通过上面的介绍,有些读者或许会有个疑问:“如果一个Web应用没有采用任何UI框架、而且编码又极为不规范,那么你这种方案岂不不适用了?”
答案是肯定的。但笔者认为此类Web应用如果想要发展下去,其瓶颈还停留在开发环节,对其进行自动化回归测试的投入产出比不是很大。
此外,为了进一步提高Web应用的可测试性,笔者在实际工作中总结了一些前台页面开发的佳实践,供大家参考:
● 页面采用单帧实现
如果页面上的frame/iframe嵌套很多的话,控件的定位会比较麻烦,并且影响展现速度。

sales@spasvo.com