Selenium IDE下载地址:
http://seleniumhq.org/download/
Selenium是一个很好用的Web界面测试框架。但它的功能也有不足之处,比如: 在Selenium IDE中不支持程序控制语句。下面介绍如何在Selenium IDE中添加程序控制功能。
1) 下载Selenium插件 (sideflow.js):
如果不想下载,直接把下面的代码保存到本机也可。
2) 简单的应用 if-else function 我们一般会用到gotoIf,gotolabel和label这三个command,在selenium ide里按照command | target | value的顺序举个简单的例子:
举例录制新浪通行证的注册模块:
添加sideflow.js文件的步骤,需要在selenium的options——general中添加sideflow.js文件,添加后重启Selenium IDE。
其中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
);
}
}