我們知道有很多工具可以做網(wǎng)頁(yè)的測試自動(dòng)化,比如MI的Quick Test Professional, IBM的rational 產(chǎn)品等。但是他們似乎都不能支持firefox的網(wǎng)頁(yè)的測試自動(dòng)化。當然有些開(kāi)源的工具是可以做到跨瀏覽器的測試自動(dòng)化的。
下面我就介紹幾種可以做Firefox自動(dòng)化測試的方法。
第一種,和很多開(kāi)源工具的核心做法是類(lèi)似的,也就是把Web Page分成兩個(gè)Frame。一個(gè)frame待測web page,另一個(gè)frame裝載測試控制的web Page。
舉個(gè)簡(jiǎn)單的例子,
主web Page:main.htm
<frameset cols="120,*">
<frame src="controlframe.htm" name="controlframe">
<frame src="contentframe.htm" name="contentframe">
</frameset>
測試控制的web Page: controlframe.htm (這里也只是有一個(gè)控制的按鈕)
<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 (這里只是一個(gè)簡(jiǎn)單的含有一個(gè)按鈕的頁(yè)面)
<html>
<head>
</head>
<body>
<input type="BUTTON" name="alert" id="alert" value="alert" onclick="alert('this is triggered')">
</body>
</html>
核心思想就是左邊的控制frame中的控制按鈕是可以用javascript訪(fǎng)問(wèn)到待測web page中的任何的控件的。
基于這個(gè),其它瀏覽器上的測試自動(dòng)化都可以用這個(gè)方法實(shí)現。但是這個(gè)方法有一個(gè)缺點(diǎn),還是一個(gè)很大的缺點(diǎn),就是如果待測的頁(yè)面是和控制的頁(yè)面在不同的domain上,比如剛才的例子里面右邊的page是新浪的page,而左邊控制的web page是在本地,那么是不能控制右邊的頁(yè)面里面的控件的。這個(gè)是Javascript的內置安全特性,防止Cross site Scripting。
有開(kāi)源工具是基于這個(gè)理論的,比如www.openqa.org/selenium/
ok,繼續第二種方法。
上面說(shuō)道用Frame的方式來(lái)做Firefox的測試自動(dòng)化。但是有跨站的限制,這次我來(lái)介紹第二種方法,那就是利用Firefox的toolbar的方式。Toolbar工作在Firefox的進(jìn)程中,所以它可以訪(fǎng)問(wèn)webpage的任何元素利用javascript。
創(chuàng )建toolbar的方式網(wǎng)上有很多,就不贅述了,主要改寫(xiě)的是兩個(gè)文件,一個(gè)是XUL文件,是用來(lái)定義toolbar的上面顯示的元素的。一個(gè)是javascript文件是用來(lái)定義toolbar上元素的行為的。
XUL 文件:(上面有一個(gè)Textbox,一個(gè)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,然后點(diǎn)擊toolbar上button來(lái)執行。Eval是可以動(dòng)態(tài)的執行javascript的。
這樣比如待測的web page上有一個(gè)Button的id是Btn1,那么在toolbar上的Textbox中輸入
window.content.document.getElementById("Btn1").click();
然后點(diǎn)擊toolbar上button來(lái)執行,就可以是待測的Web page上的這個(gè)Button被點(diǎn)擊。
可以看到,這就是核心的思路。挨下來(lái)要做的是,用Windows的api的方式,自動(dòng)將javascript發(fā)送到這個(gè)toolbar里面,這樣就可以完全用程序控制自動(dòng)化了。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/