技术开发 频道

Firefox 测试自动化

【IT168 技术文章】

    Firefox的市场占有量的上升使得很多网站都针对Firefox有了很好的支持,于是firefox浏览器上的测试也越来越重要,随着Test case的增多,自动化也就自然而然成为了一个课题。我来向大家介绍几种可行的方法。
       
    我们知道有很多工具可以做网页的测试自动化,比如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里面,这样就可以完全用程序控制自动化了。

 

0
相关文章