Professional Documents
Culture Documents
Selenium Student Material
Selenium Student Material
Testing with
SELENIUM
Page 1 of 69
1. History of Selenium
• In 2004 invented by Jason R. Huggins and team.
• Open source browser based integration test framework built originally by Thoughtworks.
2. What is Selenium?
• Acceptance Testing tool for web-apps
JavaScript
DHTML
Frames
3. Selenium Components
– Selenium IDE
– Selenium Core
– Selenium RC
– Selenium Grid
Page 2 of 69
• It is Firefox plug-in
• Firefox extension which allows record/play testing paradigm
• Automates commands, but asserts must be entered by hand
• Creates the simplest possible Locator
• Based on Selenese
3.1.1 Overview of Selenium IDE:
A. Test Case Pane
B. Toolbar
C. Menu Bar
D. Log/Reference/UI-Element/Rollup Pane
B. Toolbar: The toolbar contains buttons for controlling the execution of your test cases,
including a step feature for
C. Menu Bar:
File Menu: The File menu allows you to create, open and save test case and test
suite files.
Edit Menu: The Edit menu allows copy, paste, delete, undo and select all operations
for editing the commands in your test case.
Options Menu: The Options menu allows the changing of settings. You can set the
timeout value for certain commands, add user-defined user extensions to the base
set of Selenium commands, and specify the format (language) used when saving
your test cases.
D. Help Menu:
a. Remember Base URL MODE - Using Base URL to Run Test Cases in Different Domains
Page 3 of 69
b. Record Absolute recording mode – Run Test Cases in Particular Domain.
Run a Test Case Click the Run button to run the currently displayed test case.
Run a Test Suite Click the Run All button to run all the test cases in the currently loaded test
suite.
Stop and Start The Pause button can be used to stop the test case while it is running. The icon
of this button then changes to indicate the Resume button. To continue click Resume.
Stop in the Middle You can set a breakpoint in the test case to cause it to stop on a particular
command. This is useful for debugging your test case. To set a breakpoint, select a command,
right-click, and from the context menu select Toggle Breakpoint.
Start from the Middle You can tell the IDE to begin running from a specific command in the
middle of the test case. This also is used for debugging. To set a startpoint, select a command,
right-click, and from the context menu select Set/Clear Start Point.
Run Any Single Command Double-click any single command to run it by itself. This is useful
when writing a single command. It lets you immediately test a command you are constructing,
when you are not sure if it is correct. You can double-click it to see if it runs correctly. This is also
available from the context menu.
Exercises:
Page 4 of 69
Program:
Script Syntax:
<table>
<tr><td>open</td><td></td><td>/download/</td></tr>
<tr><td>assertTitle</td><td></td><td>Downloads</td></tr>
<tr><td>verifyText</td><td>//h2</td><td>Downloads</td></tr>
</table>
b. Accessors: Accessors examine the state of the application and store the results in
variables, e.g. "storeTitle".
assert
verify
waitFor
NOTE:
click/clickAndWait - performs a click operation, and optionally waits for a new page to load.
verifyText - verifies expected text and it’s corresponding HTML tag are present on the page.
Page 6 of 69
TC#2:
6: Verify "energy efficient" text is present anywhere in the search results: (Select and
highlight anywhere in the search results page, "energy efficient" text is present.)
7: Verify the browsers title has the value "energy efficient - Yahoo! Search Results"
8. End.
TC’S #3:
• Open http://www.ge.com
• In the result page, highlight “Thank you for taking the time to contact GE”
• Right Click and Select waitForTextPresent “Thank you for taking the time to contact GE”
• Right Click on “GE.com Home Page” link and Select verifyElementPresent “link=GE.com
Home Page”
Page 7 of 69
3.1.5 Test Suite:
A test suite is a collection of tests. Often one will run all the tests in a test suite as one
continuous batch-job.
When using Selenium-IDE, test suites also can be defined using a simple HTML file. The syntax
again is simple. An HTML table defines a list of tests where each row defines the filesystem path
to each test.
1. Create more Tc’s save each Test Case with <.html> extension.
2. Open Firefox
Page 8 of 69
6. Add more test cases
A file similar to this would allow running the tests all at once, one after another, from the
Selenium-IDE.
• If you have only one “test case” in your test suite, Open the “GE_TS1.html” in NotePad.
• Now you can double click and see the entire test suite in your browser.
• You can Edit the Test Suite in notepad when you want to
Page 9 of 69
• HTML Validator
• ColorZilla
• DOM Inspector
5. Click on OK Button
6. Restart selenium and fire fox.
3.1.7 Format:
Format #: CSV Format
Page 10 of 69
7. Under the Separator Option, select “Comma” and Press “Ok” button
Now we have created two new formats:
1. Open any of the existing test cases you have stored by going to
Page 11 of 69
verifyTextPresent
The command verifyTextPresent is used to verify specific text exists somewhere on the page.
VerifyElementPresent
Use this command when you must test for the presence of a specific UI element, rather then its
content.
verifyElementPresent can be used to check the existence of any HTML tag within the page. You
can check the existence of links, paragraphs, divisions <div>, etc. Here are a few more
examples.
VerifyText
Use verifyText when both the text and its UI element must be tested. verifyText must use a
locator. If you choose an XPath or DOM locator, you can verify that specific text appears at a
specific
location on the page relative to other UI components on the page.
B. Locating Elements
1. For many Selenium commands, a target is required.
2.This target identifies an element in the content of the web application, and consists of the
location strategy followed by the location in the format locatorType=location.
Locating by Identifier : your page source could have id and name attributes as follows:
1 <html>
2 <body>
3 <form id= "loginForm" >
4 <input name= "username" type= "text" />
5 <input name= "password" type= "password" />
6 <input name= "continue" type= "submit" value= "Login" />
Page 12 of 69
7 </form>
8 </body>
9 <html>
The following locator strategies would return the elements from the HTML snippet above
indicated by
line number:
• identifier=loginForm (3)
• identifier=username (4)
• identifier=continue (5)
• continue (5)
Since the identifier type of locator is the default, the identifier= in the first three examples
above is not necessary.
Locating by Id
This type of locator is more limited than the identifier locator type, but also more explicit. Use
this when you know an element’s id attribute.
1 <html>
2 <body>
3 <form id= "loginForm" >
4 <input name= "username" type= "text" />
5 <input name= "password" type= "password" />
6 <input name= "continue" type= "submit" value= "Login" />
7 <input name= "continue" type= "button" value= "Clear" />
8 </form>
9 </body>
10 <html>
Page 13 of 69
2 <body>
3 <form id= "loginForm" >
4 <input name= "username" type= "text" />
5 <input name= "password" type= "password" />
6 <input name= "continue" type= "submit" value= "Login" />
7 <input name= "continue" type= "button" value= "Clear" />
8 </form>
9 </body>
10 <html>
• name=username (4)
• name=continue value=Clear (7)
• name=continue Clear (7)
• name=continue type=button (7
• link=Continue (4)
• link=Cancel (5)
Locating by DOM
The Document Object Model represents an HTML document and can be accessed using
JavaScript. This location strategy takes JavaScript that evaluates to an element on the page,
which can be simply the element’s location using the hierarchical dotted notation.
Since only dom locators start with “document”, it is not necessary to include the dom= label
when specifying a DOM locator.
1 <html>
2 <body>
3 <form id= "loginForm" >
4 <input name= "username" type= "text" />
5 <input name= "password" type= "password" />
6 <input name= "continue" type= "submit" value= "Login" />
7 <input name= "continue" type= "button" value= "Clear" />
8 </form>
9 </body>
10 <html>
• dom=document.getElementById(’loginForm’) (3)
• dom=document.forms[’loginForm’] (3)
Page 14 of 69
• dom=document.forms[0] (3)
• document.forms[0].username (4)
• document.forms[0].elements[’username’] (4)
• document.forms[0].elements[0] (4)
• document.forms[0].elements[3] (7)
storeElementPresent
This corresponds to verifyElementPresent. It simply stores a boolean value–“true” or “false”–
depending on whether the UI element is found.
storeText
StoreText corresponds to verifyText. It uses a locater to identify specific page text. The text, if
found, is stored in the variable. StoreText can be used to extract text from the page being
tested.
storeEval
StoreEval allows the test to store the result of running the script in a variable.
Page 16 of 69
All variables created in your test case are stored in a JavaScript associative array. An
associative array has string indexes rather than sequential numeric indexes. The associative
array containing your test case’s variables is named storedVars. Whenever you wish to access
or manipulate a variable within a JavaScript snippet, you must refer to it as stored-
Vars[’yourVariableName’].
This next example illustrates how a JavaScript snippet can include calls to methods, in this case
the JavaScript String object’s toUpperCase method and toLowerCase method.
Page 17 of 69
JavaScript Evaluation
Exercises:
TC#4:
Page 18 of 69
Page 19 of 69
AlertPresent
• verifyAlertPresent()
– The best way to check the alerts are using this command
– This command never throws an exception
• Returns:
– True or False.
• Other AlertPresent Commands are:
– storeAlertPresent ( seleniumVariableName )
– assertAlertPresent ( )
– assertAlertNotPresent ( )
– verifyAlertNotPresent ( )
– waitForAlertPresent ( )
– waitForAlertNotPresent ( )
Ex1:
Ex 2:
Page 20 of 69
goBack:
• goBack and goBackAndWait are the two commands simulates a user clicking on the
“back” button of the browser.
• Download the SelectAWebSite.html under Exercises.
• Record the test as listed below:
– Select Google, after going to Google assertTitle then go back
– Select Portnov, after going to PortNov assertTitle then go back
– Select Microsoft, after going to MicroSoft assertTitle then go back
– Select Yahoo, after going to MicroSoft assertTitle then go back
Page 21 of 69
–
waitForPopup
– Select win1, click the button “Click and get the Welcome Message”, minimize
win1
Ex:
Page 22 of 69
3.1.10. Java Script
What is the use of java script?
1. Java script can be used by for printing some dynamic html contents
2. For validating the forms in the web page
3. Ajax - CE is advanced one for java script.
In <HEAD> tag
In <body> tag
And external key
Script.js(file name)
Page 23 of 69
document.write(“JS from script.js page<br>”);
Ex:-
<html>
<head>
<script src=’script.js’ type=’text/javascript’ language=”javascript”>
</script>
</head>
</html>
Variables:-
Ex:- a=10;
document.write(a);
Ex;- a=10;
document.write(a);
a=’’java script”; /*modifying variable */
document.write(a);
Comment lines - Two types
/* multiline comments */
Data types:-
In JScript, there are three primary data types, two composite data types, and two
special data types.
String
Number
Boolean
Ex:- a=true;
document. write (Typeof(a));
Out put
Boolean.
Ex :- n=12;
document.write(typeof(a));
Out put:- number datatype
1. Number
n=12;
document.write(n);
Ex:- n=12.5;
parseInt:-
Ex;- n=12.5;
document.write(parseint(n));
Output:- 12
document.write(parseInt(n));
Output:- 12
Concatenation:
Ex 3:- document.write(‘parseint(“12cows”)’);
document.write(‘=’);
document.write(parseInt(“12 cows”);
document.write(“<br>”);
Syntax:- document.write(‘parseInt(“12cows’)=’+parseInt(‘12cows”))+(“<BR.”);
ParseFloat:-
Ex 1:- f=”12.5 tonnes”
Page 25 of 69
Document.write(parseFloat(f));
Output;- 12.5
Document.write(img);
Territory-three operand
Iteration operators:-
Pre increment:- (++x)
X=10;
Y=++x;
Page 26 of 69
X=10;
Y=x++;
X=10;
document.write(‘x=’+(x)+’<br>’);//x=11
X=10;
D.W(‘x+’+(x)+’<br>’; x=10
D.W(“x=’+(++x)+’<br>’); x=11
X=10
d.w(‘x=’+(--x)+’<br>’); x=9
X=10
d.w(‘x=’+(x)+’<br>’); x=10
d.w(‘x--=’+(x--)+’<br>’); x=10
d.w(‘x=’+(x)+’<br>’); x=9
Logical operators:-
x y X&&y X||y
t t t t
t f f t
f t f t
Page 27 of 69
f f f f
Conditional operators:-
Ex:- x=9;
Type=(x%2==0)?”Even”:”odd”;
Control structure:-
Control structures is divided into two ways
1. Conditional Based
2. Loop Based
1. Conditional based :-
1. IF,
2. IF –else
3. IF-else IF ladder
4. Nested if and
5. Switch cases
IF:-
If(condition)
{
code
}
Ex:- var d=newData()
Var time=d.getHours()
If(time<10)
{
Document.write(“<b> Good Morning</b>”);
IF-else:-
Page 28 of 69
Syntax:-
If(condition)
{
Code
}
Else
{
Code
}
Ex:-
Age=15;
If(Age<=10)
{
d.w(“Boy”);
} else
{
d.w(“young”);
}
If-else IF Ladder:-
f(condition)
{ Code; }
Else if(con 2)
{ code; }
Else if(con 3)
{ Code; }
…………..n;
Ex:-
Perc=60;
If(perc>=70){ grade=”A”;}
else if(perc>=60){grade =”B”;}
else if(perc>=50){grade=’c’;}
Nested IF:-
If(condition1)
{
If(condition2)
{
Code;
}
else
{ Code; }
}
Ex:-
A=12;
B=13;
If(a>=b)
{
If(a>b)
{
Page 29 of 69
d.w(“A is greater<br>”);
}
else
{
d.w(“A and B are Equal<br>”);
}
}
else{
d.w(“A is less”);
}
Switch:-
Switch(expression)
{
Case ‘value’:
Code;
Break;
Case ‘val2’:
Code;
Break;
Default:
Code;
Break;
}
Ex:-
Dya=3;
Switch(day){
Case 1:
d.w(“Monday <br>”);
break;
case 2:
d.w(“Tuesday <br>”);
break:
.
.
.
Case 7:
d.w(“Sunday <br>”);
break;
default:
d.w(“Enter valid number<br>”);break;
}
Arrays:-
Array is a collection of similar elements
Syntax for creating the array is
<var name>=new Array (value 1,value 2,…value n);
Ex:- users=new Array(‘sree’,siva’,’mahe’);
Page 30 of 69
To get length of array:-
users.length: 3(//maximum numerical index +1)
users[0];//sree
users[1];//siva
Ex:-
Tags=new Array(‘barbie’,’Teddy’,’mickey’,’donald’);
d.w(‘toys.length=’+toys.length+’<br>);//4
d.w[‘toys[2]=’’+toys [2]+’<br>’);//mickey
d.w[‘toys=’+toys+’<br>’);//B,T,M,D.
toys[3]+=’Duck’;
d.w(‘toys=’+toys+’<br>’);// B,T,M,D,D
toys[toys.length]=’Newtoy’;
d.w(‘toys=’+toys+’<br’>);//B,T,M,D,D,N
Multidimentional arrays:-
Ex:- a=new Array(2,4);
B=new Array(6,8);
Multi=new Array(a,b);
B=new Array(‘1’,’name’));
d.w(‘multi[0][0]=’tmulti[0][1]+’<br>’);
Loops:-
While
While(condition)
{
Code
}
Ex:1
i=1;
while(i<=3)
{
d.w(i);
i++;
}
Ex:-2
Mon=new Array (‘jan’,’feb’,’mar’,..’dec’);
m=0;
While(m<mon.length)
Page 31 of 69
{
d.w(‘month name=’+mon[m]+’<br>’);
mi++;
}
Do-while:-
Do
{
Code;
}while(condition)
Ex:-
i=0
Do
{
d.w(i);
i++;
}while(i<=5);
For:-
For(initialization,condition,incrementation)
{
Code
}
Ex:1-
For(i=1;i<=3;i++)
{
d.w(i);
}
Ex:-2
Mon=new Array(‘jan’,’feb’,’mar’,…’dec’);
For(i=0;i<mon.length:i++)
{
d.w(mon[i]+’<br>’);
}
For-in:-
Syntax:-
For(index in arreg-nmae)
{
Array-name[index]
}
Ex:-
x=new Array(11,31,94);
For(i in x)
{
d.w(i+’=’+x[i]+’<br>’);
}
Functions:-
TYPE Arg Return
I * *
II yes *
Page 32 of 69
III * yes
IV yes yes
Type 1:-
Syntax:- function function name()
{
Code;
[return<value>;]
}
Ex:- for type 1
Function welcome()
{
document.write(“welcome to the site%”);
}
Welcome();
X=welcome();//user define
Document write(‘x=’+x+’,<br>’);
Type 3-functions:-
Function x()
{
return
9;
}
P=x();
Ex:- function x()
{
d.w(“first value is’);
return 9;
d.w(“last value is’);
calling function:-
a=x();
Page 33 of 69
d.w(‘a=’+a+’<br>’);
output:- first+val is a=9;
Page 34 of 69
P(‘math.random()=’+math.random());
String methods:-
Function p(text)
{
Document.write(text+’<br>’);
}
Str=’javascript’;
P(‘str=’+str);
P(‘length=’+str.length());
P(‘upper=’+str.touppercase());
P(‘lower=’+str.tolowercase());
P(‘str.substr=’+str.substr(4));
P(‘str.substr(4,2)=’+str.substr(4,2));
Replace of search string replacement(Replace)
P(‘str.replace(“ a”,”_”)=’+str.replace(“a”,”_”);
p(‘str.replace(“ a”,”_”)=’+str.replace(“A”,”_”);
Regular Expression:-
Function reg(expr,str)
{
R=new RegExp(expr);
Return r.test(str);
}
P(‘reg(“b”,”abc”)=’+reg(“b”+”abc”));
^ mathches to beginning of the string(if you want to verify starting,letter in whole
stirng,we can use ca(^))
Ex:- P(‘reg(“^b”,”abc”)=’+reg(“^b”+”_abc”));
Output:- false
P(‘reg(“^a”,”abc”)=’+reg(“^a”+”_abc”));
Output:- True
$ mathches to end of stirng(if you want to verify ending character in whole string,we can
use $)
Ex:- P(‘reg(“a$”,”abc”)=’+reg(“a$”+”abc”));
Output:- false
P(‘reg(“c$”,”abc”)=’+reg(“c$”+”abc”));
Output:- True
->(.) mathes any single character(alphabet,number, special character, space)(if you want to
verify only single character we can use “dot’)
Ex:- P(‘reg(“^.$”,”abc”)=’+reg(“^.$”+”abc”));
output:- false
P(‘reg(“^.$”,”a”)=’+reg(“^.$”+”a”));
Output:- True
P(‘reg(“\.doc$”,”resume.doc”)=’+reg(“\.doc”+”resume.doc”));
+ one or many times(if you want to verify any single char,if may be one time else many
times,we can use +)
P(‘reg(“a+$”,”a”)=’+reg(“a+$”+”a”));
Output:- True
P(‘reg(“a+$”,”aaa”)=’+reg(“a+$”+”aaa”));
Output:- False
P(‘reg(“a+$”,”ab”)=’+reg(“a+$”+”ab”));
Page 35 of 69
Output:- false
* 0 to many times
Ex:- P(‘reg(“a*$”,””)=’+reg(“a*$”+””));
Output:-True
P(‘reg(“a*$”,”aa”)=’+reg(“a*$”+”aa”));
Output;- True
P(‘reg(“a*$”,”ab”)=’+reg(“a*$”+”ab”));
Output:- False
? 0 or min one time or no.of times
P(‘reg(“https?”,”http://www.google.com”)=’+reg(“https?”+”http://www.google.com”));
Output:- True
{n} - for n times
{n,} -min n times
{n, m}-min n times, max m times
[] use for specifying range of char allowe for the exp.
[a-z] [A-Z] [0-9] [abcd] [a-zA-Z0-9-> Alphanumeric
Ex:- P(‘reg(“^[a-z]${3}”,”abc”)=’+reg(“^[a-z]${3}”+”abc”));
Output:- True
P(‘veg(“^[a-z]${3]”,”ABC”)=’+reg(“^[a-z]${3}”+”ABC”));
Page 36 of 69
Return reg(‘^[a-zA-Z0-9]\\w{3,}\.\\a{2,}@[a-zA-Z0-9\-]{2,}\.[a-zA-Z\.]{2,}$’,mail);
}
Ma=Sridhar.metukuru@gmail.com;
P(isEmail(ma?’valid’:’invalid’;
</script>
</head>
</html>
Ex:- User name
Function isUser(name)
{
return reg(‘^[a-zA-Z][\.][a-zA-Z]{5},’name);
}
Name=”pradeep”;
P(isuser)(name)?’valid’:’invalid’;
Ex:-
Function isUser(name)
{
return reg(‘^[a-zA-Z][a-zA-Z\.]{5,}’,name);
}
Name=Pradeep;
P(isuser(name)?’valid’:’invalid’);
Selenium Modes
• Test Runner Mode
Page 37 of 69
Selenium IDE Commands
1. allowNativeXpath(allow)
Arguments:
allow - boolean, true means we'll prefer to use native XPath
Syntax:
command: allowNativeXpath
Target: True
Instructs Selenium to return the specified answer string in response to the next
JavaScript prompt [window.prompt()].
4. assertAlertPresent()
Generated from isAlertPresent()
Returns:
true if there is an alert
Has an alert occurred?
5. assertAllButtons(pattern)
Generated from getAllButtons()
Returns:
the IDs of all buttons on the page
Returns the IDs of all buttons on the page.
6. assertAllFields(pattern)
Generated from getAllFields()
Returns:
the IDs of all field on the page
Returns the IDs of all input fields on the page.
7. assertAllLinks(pattern)
Generated from getAllLinks()
Returns:
the IDs of all links on the page
Page 38 of 69
Returns the IDs of all links on the page.
assertNotAllButtons, assertNotAllFields,assertNotAllWindowIds,
assertNotAllWindowNames, assertNotAllWindowTitles, assertNotAttribute,
assertNotAttributeFromAllWindows.
assertElementPresent(locator)
Returns:
true if the element is present, false otherwise
Verifies that the specified element is somewhere on the page.
assertEval(script, pattern)
Generated from getEval(script)
Arguments:
script - the JavaScript snippet to run
Returns:
the results of evaluating the snippet
Gets the result of evaluating the specified JavaScript snippet. The snippet may have
multiple lines, but only the result of the last line will be returned.
Similarly: assertExpression,
assertHtmlSource(pattern)
Generated from getHtmlSource()
Returns:
the entire HTML source
Returns the entire HTML source between the opening and closing "html" tags.
assertLocation(pattern)
Generated from getLocation()
Returns:
the absolute URL of the current page
Gets the absolute URL of the current page.
assertNotXpathCount(xpath, pattern)
Page 39 of 69
Generated from getXpathCount(xpath)
Arguments:
xpath - the xpath expression to evaluate. do NOT wrap this expression in a
'count()' function; we will do that for you.
Returns:
the number of nodes that match the specified xpath
Returns the number of nodes that match the specified xpath, eg. "//table" would give the
number of tables.
Similarly: assertXpathcount
assertText(locator, pattern)
Generated from getText(locator)
Returns:
the text of the element
Gets the text of an element. This works for any element that contains text. This
command uses either the textContent (Mozilla-like browsers) or the innerText (IE-like
browsers) of the element, which is the rendered text shown to the user.
assignId(locator, identifier)
Arguments:
locator - an element locator pointing to an element
identifier - a string to be used as the ID of the specified element
Temporarily sets the "id" attribute of the specified element, so you can locate it in the
future using its ID rather than a slow/complicated XPath. This ID will disappear once the
page is reloaded.
Similarly: assignIdAndWait
captureEntirePageScreenshot(filename, kwargs)
Arguments:
filename - the path to the file to persist the screenshot as. No filename extension
will be appended by default. Directories will not be created if they do not exist,
and an exception will be thrown, possibly by native code.
kwargs - a kwargs string that modifies the way the screenshot is captured.
Example: "background=#CCFFDD" . Currently valid options:
background
the background CSS for the HTML document. This may be useful to set for capturing
screenshots of less-than-ideal layouts, for example where absolute positioning causes the
calculation of the canvas dimension to fail and a black background is exposed (possibly
obscuring black text).
Page 40 of 69
Saves the entire contents of the current window canvas to a PNG file. Contrast this with
the captureScreenshot command, which captures the contents of the OS viewport (i.e.
whatever is currently being displayed on the monitor), and is implemented in the RC
only. Currently this only works in Firefox when running in chrome mode, and in IE non-
HTA using the EXPERIMENTAL "Snapsie" utility. The Firefox implementation is
mostly borrowed from the Screengrab! Firefox extension. Please see
http://www.screengrab.org and http://snapsie.sourceforge.net/ for details.
Similarly: captureEntirePageScreenshotAndWait
check(locator)
Arguments:
locator - an element locator
Similarly: checkAndWait
chooseCancelOnNextConfirmation(),chooseOkOnNextConfirmation(),
chooseOkOnNextConfirmationAndWait
createCookie, createCookieAndWait
deleteAllVisibleCookies()
Calls deleteCookie with recurse=true on all cookies visible to the current page. As noted
on the documentation for deleteCookie, recurse=true can be much slower than simply
deleting the cookies using a known domain/path.
Similarly: deleteAllVisibleCookiesAndWait, deleteCookie, deleteCookieAndWait,
doubleClick(locator)
Arguments:
locator - an element locator
Double clicks on a link, button, checkbox or radio button. If the double click action
causes a new page to load (like a link usually does), call waitForPageToLoad.
Similarly: doubleClickAndWait, doubleClickAt, doubleClickAtAndWait.
echo(message)
Arguments:
message - the message to print
Page 41 of 69
Prints the specified message into the third table cell in your Selenese tables. Useful for
debugging.
fireEvent(locator, eventName)
Arguments:
locator - an element locator
eventName - the event name, e.g. "focus" or "blur"
focus(locator)
Arguments:
locator - an element locator
Move the focus to the specified element; for example, if the element is an input field,
move the cursor to that field.
Similarly: focusAndWait
goBack()
Simulates the user clicking the "back" button on their browser.
Similarly: goBackAndWait
ignoreAttributesWithoutValue(ignore)
Arguments:
ignore - boolean, true means we'll ignore attributes without value at the expense
of xpath "correctness"; false means we'll sacrifice speed for correctness.
Similarly: ignoreAttributesWithoutValueAndWait
open(url)
Arguments:
url - the URL to open; may be relative or absolute
pause(waitTime)
Arguments:
waitTime - the amount of time to sleep (in milliseconds)
removeAllSelections(locator)
Arguments:
locator - an element locator identifying a multi-select box
removeScript(scriptTagId)
Arguments:
scriptTagId - the id of the script element to remove.
Removes a script tag from the Selenium document identified by the given id. Does
nothing if the referenced tag doesn't exist.
Similarly: removeScriptAndWait
runScript(script)
Arguments:
script - the JavaScript snippet to run
Similarly: runScriptAndWait
select(selectLocator, optionLocator)
Arguments:
selectLocator - an element locator identifying a drop-down menu
optionLocator - an option locator (a label by default)
setTimeout(timeout)
Arguments:
timeout - a timeout in milliseconds, after which the action will return with an
error
Specifies the amount of time that Selenium will wait for actions to complete.
Actions that require waiting include "open" and the "waitFor*" actions.
store(expression, variableName)
Arguments:
expression - the value to store
variableName - the name of a variable in which the result is to be stored.
Page 43 of 69
This command is a synonym for storeExpression.
storeEval(script, variableName)
Generated from getEval(script)
Arguments:
script - the JavaScript snippet to run
Returns:
the results of evaluating the snippet
storeXpathCount(xpath, variableName)
Generated from getXpathCount(xpath)
Arguments:
xpath - the xpath expression to evaluate. do NOT wrap this expression in a
'count()' function; we will do that for you.
Returns:
the number of nodes that match the specified xpath
Returns the number of nodes that match the specified xpath, eg. "//table" would give the
number of tables.
submit(formLocator)
Arguments:
formLocator - an element locator for the form you want to submit
Submit the specified form. This is particularly useful for forms without submit buttons,
e.g. single-input "Search" forms.
Similarly: submitAndWait
type(locator, value)
Arguments:
locator - an element locator
value - the value to type
Similarly: typeAndWait
Page 44 of 69
uncheck(locator)
Arguments:
locator - an element locator
Similarly: uncheckAndWait
verifyAlert(pattern)
Generated from getAlert()
Returns:
The message of the most recent JavaScript alert
verifyConfirmation(pattern)
Generated from getConfirmation()
Returns:
the message of the most recent JavaScript confirmation dialog
Retrieves the message of a JavaScript confirmation dialog generated during the previous
action.
verifyText(locator, pattern)
Generated from getText(locator)
Arguments:
locator - an element locator
Returns:
the text of the element
waitForAlert(pattern)
Generated from getAlert()
Returns:
The message of the most recent JavaScript alert
Retrieves the message of a JavaScript alert generated during the previous action, or fail
if there were no alerts.
waitForConfirmationPresent()
Page 45 of 69
Generated from isConfirmationPresent()
Returns:
true if there is a pending confirmation
Has confirm() been called?
Similarly: waitForCondition
waitForTitle(pattern)
Generated from getTitle()
Returns:
the title of the current page
Gets the title of the current page.
GE Test Case 1
open http://www.ge.com/
type textToSearch energy efficient
clickAndWait searchSubmit
assertTitle exact:GE: Search Results
assertTextPresent energy efficient
Tc# 2:
GE Test Case2
open http://www.ge.com/
assertTitle GE : imagination at work
clickAndWait //div[@id='ge_footer']/ul/li[2]/a
GE Contact Information: Web Questions, Online Help,
assertTitle
Press Contacts
clickAndWait link=Feedback and Inquiries
assertTitle Feedback & Inquiries : Contact Information : GE
pause 3000
select contact_subject label=Other
Page 46 of 69
GE Test Case2
label=United
select contact_country
States
type contact_email testing@test.com
type contact_comments No questions.
clickAndWait //form[@id='contact_form']/p/input
verifyTextPresent Thank you for taking the time to contact GE.
verifyTextPresent Feel free to continue browsing
verifyElementPresent link=GE.com Home Page
Page 47 of 69
Age Test Case
assertAlert I hate this life
type idAge www
check idSubGo
pause 5000
clickAndWait idSubGo
assertAlert Something wrong, enter your right age!
TC_Google_EE
open http://www.google.com/
type q energy efficient
clickAndWait btnG
waitForTextPresent energy efficiency
assertTitle energy efficient - Google Search
TestCase_HelloWorld
open file:///C:/2009%20Selenium/Day3/Ex/HelloWorld.html
store Kangeyan vName
echo ${vName}
answerOnNextPrompt ${vName}
click link=Click here to enter your name
waitForPrompt Please enter your name.
echo ${vName}
createCookie idName ${vName}
TC# 6:
Reviewed Test Case Barnes and Noble Sorted Order
open http://www.barnesandnoble.com/index.asp
type search-input javascript
clickAndWait quick-search-button
Page 48 of 69
Reviewed Test Case Barnes and Noble Sorted Order
pause 10000
clickAndWait link=Price
//div[@id='bs-center-
storeText T1
col']/div[3]/div[1]/div[2]/div/div/div/ul[1]/li[2]/strong
echo ${T1}
xpath=id('bs-center-
storeText T2
col')/div[3]/div[3]/div[2]/div/div/div/ul[1]/li[1]/strong
echo ${T2}
//div[@id='bs-center-
storeText T3
col']/div[3]/div[5]/div[2]/div/div/div/ul[1]/li[1]/strong
echo ${T3}
var A= new Number("${T1}".substr(1));var B=new Number("$
storeEval T4
{T2}".substr(1)); var Result1=false; if (A<=B) Result1=true;Result1
echo ${T4}
var B= new Number("${T2}".substr(1));var C=new Number("$
storeEval T5
{T3}".substr(1)); var Result2=false; if (B<=C) Result2=true;Result2
echo ${T5}
storeEval var Result1= new Boolean("${T4}");Result1 R1
echo ${R1}
storeEval var Result2= new Boolean("${T5}");Result2 R2
echo ${R2}
var Result1= new Boolean("${T4}");var Result2=new Boolean("$
storeEval T6
{T5}"); Result1 && Result2
store true T7
echo ${T6}
verifyExpression ${T6} ${T7}
echo ${T7}
var isSorted = new Boolean("${T6}"); var strResult ='Not in Sorted
storeEval vSorted
Order'; if (isSorted) strResult='Ascending Order'; strResult
echo ${vSorted}
Page 49 of 69
Test Case Alert Button Click
assertAlert Welcome to Portnov!
Page 50 of 69
Reviewed Test Case Popup
click winBut
waitForPopUp win1 30000
waitForPopUp win2 30000
waitForPopUp win3 30000
selectWindow name=win1
click //input[@value='Click and get the Welcome Message']
assertAlert Welcome to Portnov!
selectWindow name=win3
click //input[4]
click Submit
assertConfirmation Are you sure you want to submit this answer?
assertAlert submitted
selectWindow null
click //input[@name='winBut' and @value='Close Windows']
Regular Expression
Tc#10: Verify Page Title
Reviewed Test Case Window Name Check
open file:///C:/2009%20Selenium/Day%204/Ex/ShowWinName.html
click winBut
regex:Ex1.html
assertAlert
win1
regex:Ex2.html
assertAlert
win2
regex:Ex3.html
assertAlert
win3
Tc#11: Regular Expression
Reviewed Test Case RegEx Email Check
file:///C:/2009%20Selenium/Day
open
%204/Ex/UserInputForm.html
type txtName kangs p
type txtEmail KANGS@YAHOO.COM
click //input[@value='Submit']
Page 51 of 69
Reviewed Test Case RegEx Email Check
verify
//form[@id='frm']/table.1.2 Valid
Table
verify
//form[@id='frm']/table.2.2 Valid
Table
storeV
txtName selName
alue
echo ${selName}
storeV
txtEmail selEmail
alue
echo ${selEmail}
assert
storedVars['selName'] regex:\w+\s\w+
Eval
regex:^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]
assert javascript:jStr=storedVars['selEmail'
+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|
Eval ]; jStr.toLowerCase()
int|jobs|mil|museum|name|nato|net|org|pro|travel)$
Store Value
Page 52 of 69
Name is tested with regex:\w+\s\w+
Email is first converted into lower case then tested using regex.
assertE
storedVars['selName'] regex:\w+\s\w+
val
javascript:jStr=storedVars regex:^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]
assertE
['selEmail']; {2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|
val
jStr.toLowerCase() name|nato|net|org|pro|travel)$
Testing Highlight
assertElementPresent idNameDisp
assertElementPresent idEmailDisp
Tc#11:
Test Case DevryPopupWindows Close
http://www.devry-
degrees.com/7x/prequal.jsp;jsessionid=GYW5fw1VxepITK3Fi7CXsg**.ap
open
p8-all1?
redirected=redirect&CLK=0&CCID=&QTR=&ZN=&ZV=&KY_T=
refresh
setSpeed 3000
Page 53 of 69
Test Case DevryPopupWindows Close
assertTitle DeVry Online Focus Site
click //div[@id='footerlogo']/table/tbody/tr[1]/td[1]/a[1]/u
waitForPopU
Thandie 30000
p
selectWindow name=Thandie
assertTitle Accreditation - DeVry University
click //html/body/table/tbody/tr[4]/td/a
selectWindow null
click //div[@id='footerlogo']/table/tbody/tr[1]/td[1]/a[1]/u
waitForPopU
Thandie 30000
p
selectWindow null
pause 10000
click //div[@id='footerlogo']/table/tbody/tr[1]/td[1]/a[2]/u
waitForPopU
Thandie 30000
p
selectWindow name=Thandie
assertTitle Programs-DeVry University
click //html/body/table[2]/tbody/tr/td/p/a
selectWindow null
click //div[@id='footerlogo']/table/tbody/tr[1]/td[2]/a[1]/u
waitForPopU
Thandie 30000
p
selectWindow name=Thandie
assertTitle Your California Privacy Rights
click //html/body/table/tbody/tr[2]/td/a
selectWindow null
click //div[@id='footerlogo']/table/tbody/tr[1]/td[2]/a[2]/u
waitForPopU
Thandie 30000
p
selectWindow name=Thandie
assertTitle Privacy Policy - DeVry University
click //html/body/table/tbody/tr[2]/td/a
selectWindow null
Page 54 of 69
Tc#12: Verify Page Load Time
Test Case for PageLoadTime_Simple
open http://www.yahoo.com/
storeEval (new Date()).getTime() StartTime
refresh
waitForPageToLoad 3000
storeEval (new Date()).getTime() EndTime
echo ${StartTime}
echo ${EndTime}
storeEval (${EndTime}-${StartTime})/1000 PageLoadTime
echo ${PageLoadTime} Seconds
storeEval (new Date()).getTime() StartTime
open http://www.yahoo.com/
waitForPageToLoad 3000
storeEval (new Date()).getTime() EndTime
storeEval (${EndTime}-${StartTime})/1000 PageLoadTime
echo ${PageLoadTime} Seconds
Tc#13: AvgPageLoadTime
Test Case for PageLoadTime
open http://www.yahoo.com/
storeEval (new Date()).getTime() StartTime
refresh
waitForPageToLoad 3000
storeEval (new Date()).getTime() EndTime
echo ${StartTime}
echo ${EndTime}
storeEval (${EndTime}-${StartTime})/1000 PageLoadTime1
echo ${PageLoadTime1} Seconds
storeEval (new Date()).getTime() StartTime
open http://www.yahoo.com/
waitForPageToLoad 3000
Page 55 of 69
Test Case for PageLoadTime
storeEval (new Date()).getTime() EndTime
storeEval (${EndTime}-${StartTime})/1000 PageLoadTime2
echo ${PageLoadTime2} Seconds
storeEval (${PageLoadTime1}+${PageLoadTime2})/2 AvgPageLoadTime
echo ${AvgPageLoadTime} Seconds
Page 56 of 69
Test Case Xpath
verifyTable idCourse.0.1 Course Name
verifyTable idCourse.4.0 4
verifyTable idCourse.4.1 Selenium
verifyTable idCourse.4.2 Kangs
verifyTable idCourse.4.3 4/4/2009
verifyTable idCourse.0.2 Instructor Name
verifyTable idCourse.0.3 Start Date
verifyTable idCourse.6.0 6
verifyTable idCourse.6.1 Python
verifyTable idCourse.6.2 Michell
verifyTable idCourse.6.3 6/6/2009
storeText //table[@id='idCourse']/tbody/tr[7]/td[4] sLastRowCell4
echo ${sLastRowCell4}
Selenium Core
Introduction:
• Selenium Core tests run directly in a browser, just as real users do. And they run in
Internet Explorer, Mozilla and Firefox on Windows, Linux, and Macintosh.
• Selenium uses JavaScript and Iframes to embed a test automation engine in browsers.
Page 57 of 69
• Selenium was designed specifically for the acceptance testing requirements of Agile
teams.
• Selenium was designed specifically for the acceptance testing requirements of Agile
teams.
• Cross Browser and Cross Platform compatibility testing. One can test and verify whether
the application works correctly on different browsers and operating systems. The same
script can run on any Selenium platform.
HTA Mode in IE
• The web-developer need to create the menus, icons, toolbars, and title information then
only those will be available within that application.
• HTAs pack all the power of object model, performance, rendering power, protocol
support, and channel–download technology—without enforcing the strict security model
and user interface of the browser.
• HTAs can be created using the HTML and Dynamic HTML (DHTML).
• Selenium Core provides an additional mechanism for running automated tests called
"HTA mode."
• An HTA file is a special type of HTML file that is allowed to violate the same origin policy
and to write files to disk. When running in HTA mode, you don't have to install Selenium
Core on the same web server.
• HTA files are also allowed to save test results directly to disk, rather than posting the test
results to a web server.
• apache_2.2.11-win32-x86-no_ssl.msi
• Open index.html check whether it will display “it works” Message or Not.
• Go to http://seleniumhq.org/download/
• Right Click on the Download Link under Selenium Core, and download the file under
Apache web server
• Right click on the Zip file, and unzip by Selecting winzip à select Extract to here
• http://localhost/Selenium/core/TestRunner.html
• If you are able to see Selenium Test Runner Control Panel, then the installation is
complete and successful.
Page 59 of 69
3. Create these test cases as Testsuite.html
4. In Windows Explorer Go to
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\Selenium
5. Create a new folder called “oragehrm”
6. Save all Test cases, Test Suites under “orangehrm” Folder.
– http://localhost/Selenium/core/TestRunner.hta
– ../oragehrm/TestSuite.html
• Now, you can run either individual test cases or entire suite. Do as you wish.
Page 60 of 69
• HTA Mode allows you to save the results to a file
Selenium-RC
1. Introduction
Selenium-RC is the solution for tests that need more than simple browser actions and linear
execution.
Page 61 of 69
Selenium-RC uses the full power of programming languages to create more complex tests like
reading and writing files, querying a database, emailing test results.
You’ll want to use Selenium-RC whenever your test requires logic not supported by Selenium-
IDE.
What logic could this be? For example, Selenium-IDE does not directly support:
• condition statements
• iteration
• logging and reporting of test results
• error handling, particularly unexpected errors
• database testing
• test case grouping
• re-execution of failed tests
• test case dependency
• screenshot capture of test failures
Although these tasks are not supported by Selenium directly, all of them can be achieved by
using programming techniques with a language-specific Selenium-RC client library.
2. Installing Selenium RC
Checking JRE
• Go to http://seleniumhq.org/download/
Page 62 of 69
• Rename the selenium-server-1.0-beta-2 into JavaServer
• Cd C:\SeleniumRC\JavaServer
• Keep the server running (Do not close this cmd line window)
– Cd c:\ruby
Page 63 of 69
– Ruby testEE.rb
• Browsers
• Operating Systems
• Programming Languages
• Testing Frameworks
– Bromine, JUnit & TenstNG (Java), NUnit (.Net), RSpec & Test::Unit (Ruby),
unittest (Python)
• interactive:
• multiWindow:
– Tests are executed in a separate window and supports web pages with
frames.
– sets the forced default browser mode (e.g. "*iexplore“) for all sessions, no
matter what is passed in getNewBrowserSession
• userExtensions <file>:
• browserSessionReuse:
Page 64 of 69
– stops re-initialization and spawning of the browser between tests
• avoidProxy:
– set this flag to make the browser use proxy only for URLs containing
'/selenium-server'
• firefoxProfileTemplate <dir>:
• debug:
– Debug mode provides more trace information and used for diagnostics
purpose
• log:
– Provide browser and URL to run a single HTML Selenese Test suite and
then exit immediately.
– Provide absolute path to the HTML test suite, and HTML results file.
• proxyInjectionMode:
• The following additional flags are supported for proxy injection mode :
– A regular expression which is matched against all test HTML content; the
second is a string which will replace matches. These flags can be used any
number of times. A simple example of how this could be useful: if you add
Page 65 of 69
"-userContentTransformation https http" then all "https" strings in the
HTML of the test application will be changed to be "http".
• The "interactive mode (IM)" allows you to run your test case commands on the Selenium
Server interactively.
• To completely automate the test suites, it is best practice to write your tests in a suitable
programming language. Not using interactive mode.
Page 66 of 69
*firefoxproxy Firefox normal No
Selenium RC – getNewBrowserSession
• During the "interactive mode" one can get the current browser Session ID using the
getNewBrowserSession command.
– Example: http://www.google.com
• testComplete command will stop the current session. No longer you can use the same
session for further testing after executing this command.
– Example:
– cmd=type&1=q&2=energy
efficient&sessionId=500b9ffb521d4c67b37e649a7bd5e527
– cmd=close&sessionId=500b9ffb521d4c67b37e649a7bd5e527
– cmd=waitForTextPresent&1=energy
efficiency&sessionId=500b9ffb521d4c67b37e649a7bd5e527
Page 67 of 69
• The session ID is optional. Use session ID when you have multiple sessions.
• Both &1 and &2 parameters are optional. If the Selenese command contains
parameter then you may need it.
• Copy the first line of the code and paste in the interactive mode (*4)
– cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
• Open notepad/wordpad
– C:\2009 Selenium\Ex\GE
– TestSuite.html
– GE Test Case1.html
– GE Test Case3.html
– GE Test Case.bat
Page 68 of 69
• Command window open and run the test suite
• After completing the test, double click on the “FF GE Test Results.html”
Page 69 of 69