如何用Selenium IDE 实现简单的循环和条件语句

Selenium IDE下载地址:

 http://seleniumhq.org/download/

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

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

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

2) 简单的应用 if-else function 我们一般会用到gotoIfgotolabellabel这三个command,在selenium ide里按照command | target | value的顺序举个简单的例子:


举例录制新浪通行证的注册模块:


如何用Selenium IDE 实现简单的循环和条件语句_第1张图片


添加sideflow.js文件的步骤,需要在selenium的options——general中添加sideflow.js文件,添加后重启Selenium IDE。

如何用Selenium IDE 实现简单的循环和条件语句_第2张图片


其中sideflow.js的下载地址:

https://github.com/darrenderidder/sideflow/blob/master/sideflow.js


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  =  [];
     var  forEachCmds  =  [];
     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 ;
             case  "foreach" :
             case  "endforeach" :
                 forEachCmds . 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  );
}

Selenium . prototype . doPush =  function ( value ,  varName )
{
     if ( ! storedVars [ varName ])  {
         storedVars [ varName ]  =  new  Array ();
     }
     if ( typeof  storedVars [ varName ]  !==  'object' )  {
         throw  new  Error ( "Cannot push value onto non-array "  +  varName );
     }  else  {
         storedVars [ varName ]. push ( value );
     }
}

你可能感兴趣的:(Selenium,IDE)