使用Selenium测试Web界面时使用循环控制功能

使用Selenium测试Web界面时使用循环控制功能

Selenium是一个很好用的Web界面测试框架。但它的功能也有不足之处,比如: 在Selenium IDE中不支持程序控制语句。下面介绍如何在Selenium IDE中添加程序控制功能。

1)下载Selenium插件 (sideflow.js): 

如果不想下载,直接把下面的代码保存到本机也可。

?
var  gotoLabels= {};
var  whileLabels = {};
 
// overload the original Selenium reset function
Selenium.prototype.reset = function () {
     // reset the labels
     this .initialiseLabels();
     // proceed with original reset code
     this .defaultTimeout = Selenium.DEFAULT_TIMEOUT;
     this .browserbot.selectWindow( "null" );
     this .browserbot.resetPopups();
}
 
Selenium.prototype.initialiseLabels = function ()
{
     gotoLabels = {};
     whileLabels = { ends: {}, whiles: {} };
     var  command_rows = [];
     var  numCommands = testCase.commands.length;
     for  ( var  i = 0; i < numCommands; ++i) {
         var  x = testCase.commands[i];
         command_rows.push(x);
     }
     var  cycles = [];
     for ( var  i = 0; i < command_rows.length; i++ ) {
         if  (command_rows[i].type == 'command' )
         switch ( command_rows[i].command.toLowerCase() ) {
             case  "label" :
                 gotoLabels[ command_rows[i].target ] = i;
                 break ;
             case  "while" :
             case  "endwhile" :
                 cycles.push( [command_rows[i].command.toLowerCase(), i] )
                 break ;
         }
    
     var  i = 0;
     while ( cycles.length ) {
         if ( i >= cycles.length ) {
             throw  new  Error( "non-matching while/endWhile found"  );
         }
         switch ( cycles[i][0] ) {
             case  "while" :
                 if ( ( i+1 < cycles.length ) && ( "endwhile"  == cycles[i+1][0] ) ) {
                     // pair found
                     whileLabels.ends[ cycles[i+1][1] ] = cycles[i][1];
                     whileLabels.whiles[ cycles[i][1] ] = cycles[i+1][1];
                     cycles.splice( i, 2 );
                     i = 0;
                 } else  ++i;
                 break ;
             case  "endwhile" :
                 ++i;
                 break ;
         }
     }
}
 
Selenium.prototype.continueFromRow = function ( row_num )
{
     if (row_num == undefined || row_num == null  || row_num < 0) {
         throw  new  Error( "Invalid row_num specified."  );
     }
     testCase.debugContext.debugIndex = row_num;
}
 
// do nothing. simple label
Selenium.prototype.doLabel = function (){};
 
Selenium.prototype.doGotolabel = function ( label )
{
     if ( undefined == gotoLabels[label] ) {
         throw  new  Error( "Specified label '"  + label + "' is not found."  );
     }
     this .continueFromRow( gotoLabels[ label ] );
};
 
Selenium.prototype.doGoto = Selenium.prototype.doGotolabel;
 
Selenium.prototype.doGotoIf = function ( condition, label )
{
     if ( eval(condition) ) this .doGotolabel( label );
}
 
Selenium.prototype.doWhile = function ( condition )
{
     if ( !eval(condition) ) {
         var  last_row = testCase.debugContext.debugIndex;
         var  end_while_row = whileLabels.whiles[ last_row ];
         if ( undefined == end_while_row ) throw  new  Error( "Corresponding 'endWhile' is not found."  );
         this .continueFromRow( end_while_row );
     }
}
 
Selenium.prototype.doEndWhile = function ()
{
     var  last_row = testCase.debugContext.debugIndex;
     var  while_row = whileLabels.ends[ last_row ] - 1;
     if ( undefined == while_row ) throw  new  Error( "Corresponding 'While' is not found."  );
     this .continueFromRow( while_row );
}

下载地址: https://github.com/darrenderidder/sideflow

2)在Selenium中配置插件。如下图所示,添加sideflow.js 到 "Selenium Core extensions (user-extensions.js)" 文本框中,重新启动Selenium IDE。

使用Selenium测试Web界面时使用循环控制功能_第1张图片

3) 这样就可以在Selenium中使用流程控制了,例如

使用Selenium测试Web界面时使用循环控制功能_第2张图片

你可能感兴趣的:(使用Selenium测试Web界面时使用循环控制功能)