我們知道有很多工具可以做網頁的測試自動化,比如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里面,這樣就可以完全用程序控制自動化了。