我们知道有很多工具可以做网页的测试自动化,比如MI的Quick Test Professional, IBM的rational 产品等。但是他们似乎都不能支持firefox的网页的测试自动化。当然有些开源的工具是可以做到跨浏览器的测试自动化的。
下面我就介绍几种可以做Firefox自动化测试的方法。
第一种,和很多开源工具的核心做法是类似的,也就是把Web Page分成两个Frame。一个frame待测web page,另一个frame装载测试控制的web Page。
举个简单的例子,
主web Page:main.htm
<frameset cols="120,*">
<frame src="controlframe.htm" name="controlframe">
<frame src="contentframe.htm" name="contentframe">
</frameset>
测试控制的web Page: controlframe.htm (这里也只是有一个控制的按钮)
<html>
<head>
</head>
<body>
<INPUT TYPE="BUTTON" name="Execute" id="Execute" value="Execute" onClick="parent.contentframe.document.getElementById('alert').click()">
</body>
</html>
待测web page: contentframe.htm (这里只是一个简单的含有一个按钮的页面)
<html>
<head>
</head>
<body>
<input type="BUTTON" name="alert" id="alert" value="alert" onclick="alert('this is triggered')">
</body>
</html>
核心思想就是左边的控制frame中的控制按钮是可以用javascript访问到待测web page中的任何的控件的。
基于这个,其它浏览器上的测试自动化都可以用这个方法实现。但是这个方法有一个缺点,还是一个很大的缺点,就是如果待测的页面是和控制的页面在不同的domain上,比如刚才的例子里面右边的page是新浪的page,而左边控制的web page是在本地,那么是不能控制右边的页面里面的控件的。这个是Javascript的内置安全特性,防止Cross site Scripting。
有开源工具是基于这个理论的,比如www.openqa.org/selenium/
ok,继续第二种方法。
上面说道用Frame的方式来做Firefox的测试自动化。但是有跨站的限制,这次我来介绍第二种方法,那就是利用Firefox的toolbar的方式。Toolbar工作在Firefox的进程中,所以它可以访问webpage的任何元素利用javascript。
创建toolbar的方式网上有很多,就不赘述了,主要改写的是两个文件,一个是XUL文件,是用来定义toolbar的上面显示的元素的。一个是javascript文件是用来定义toolbar上元素的行为的。
XUL 文件:(上面有一个Textbox,一个Button)
<toolbox id="navigator-toolbox">
<toolbar id="test-toolbar">
<toolbaritem id="item1">
<label value="Command:" control="CommandLabel"/>
</toolbaritem>
<toolbaritem id="item2">
<textbox id="CommandTxt" minwidth="300" width="500" />
</toolbaritem>
<toolbaritem id="item2">
<button id="ExecuteBtn" label="Execute" oncommand="hello();"/>
</toolbaritem>
</toolbar>
</toolbox>
JS文件:
function hello()
{
var searchTermsBox =document.getElementById("CommandTxt");
var txt=searchTermsBox.value;
eval(txt);
}
可以看到你可以在toolbar上的Textbox中input操纵web Page的javascript,然后点击toolbar上button来执行。Eval是可以动态的执行javascript的。
这样比如待测的web page上有一个Button的id是Btn1,那么在toolbar上的Textbox中输入
window.content.document.getElementById("Btn1").click();
然后点击toolbar上button来执行,就可以是待测的Web page上的这个Button被点击。
可以看到,这就是核心的思路。挨下来要做的是,用Windows的api的方式,自动将javascript发送到这个toolbar里面,这样就可以完全用程序控制自动化了。