使用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。
3) 这样就可以在Selenium中使用流程控制了,例如