CONTENTS
1 Note to the
Reader–Docs Being Revised for Selenium 2.0!
3
2 Introduction 5
2.1 Test
Automation for Web Applications . . . . . . . . . . . . .
. . . . . . . . . . . . . 5
2.2 To Automate
or Not to Automate? . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 5
2.3 Introducing
Selenium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 6
2.4 Brief History
of The Selenium Project . . . . . . . . . . . . . . . . . . . . . . . .
. . . 6
2.5 Selenium’s
Tool Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 7
2.6 Choosing Your
Selenium Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.7 Supported
Browsers and Platforms . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 8
2.8 Flexibility
and Extensibility . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 9
2.9 What’s in
this Book? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 9
2.10 The
Documentation Team–Authors Past and Present . . . . . . . . . . . . .
. . . . . . 10
3 Selenium-IDE 13
3.1 Introduction .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.2 Installing
the IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 13
3.3 Opening the
IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 16
3.4 IDE Features .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.5 Building Test
Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 20
3.6 Running Test
Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 22
3.7 Using Base
URL to Run Test Cases in Different Domains . . . . . . . . . . . . .
. . . 22
3.8 Selenium
Commands – “Selenese” . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 23
3.9 Script Syntax
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 24
3.10 Test Suites .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.11 Commonly
Used Selenium Commands . . . . . . . . . . . . . . . . . . . . . . . .
. . 25
3.12 Verifying
Page Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 26
3.13 Assertion or
Verification? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
REVISED
FOR SELENIUM 2.0!
Hello, and welcome!
The Documentation Team would like to welcome you, and to thank you for being
interested in
Selenium.
We are
currently updating this document for the Selenium 2.0 release. This
means we are currently
writing and editing
new material, and revising old material. While reading, you may experience
typos
or other minor
errors. If so, please be patient with us. Rather than withholding information
until
it’s finally
complete, we are frequently checking-in new writing and revisions as we go.
Still, we do
check our facts
first and are confident the info we’ve submitted is accurate and useful. Still,
if you
find an error,
particularly in one of our code examples, please let us know. You can create a
new issue
(http://code.google.com/p/selenium/issues/entry)
with “Docs Error” in the subject line.
We have worked
very, very hard on this document. And, as just mentioned, we are once again
working
hard, on the new
revision. Why? We absolutely believe this is the best tool for web-application
testing.
We feel its
extensibility and flexibility, along with its tight integration with the
browser, is unmatched by
available
proprietary tools. We are very excited to promote Selenium and, hopefully, to
expand its user
community. In
short, we really want to “get the word out” about Selenium.
We believe you will
be similarly excited once you understand how Selenium approaches test
automation.
It’s quite
different from other automation tools. Whether you are brand-new to Selenium,
or have been
using it for
awhile, we believe this documentation will truly help to spread the knowledge
around. We
have aimed our
writing so that those completely new to test automation can use this document
as a
stepping stone.
However, at the same time we have included a number of advanced, test design
topics
that should be
interesting to the experienced software engineer. In both cases we have written
the “Sel-
Docs” to help test
engineers of all abilities to quickly become productive writing your own Selenium
tests. Experienced
users and “newbies” alike will benefit from our Selenium User’s Guide.
Thanks very much
for reading.
– the Selenium
Documentation Team
3
Selenium
Documentation, Release 1.0
4
Chapter 1. Note to the Reader–Docs Being Revised for Selenium
2.0!
CHAPTER
TWO
INTRODUCTION
2.1
Test Automation for Web Applications
Many, perhaps most,
software applications today are written as web-based applications to be run in
an
Internet browser.
The effectiveness of testing these applications varies widely among companies
and
organizations. In
an era of highly interactive and responsive software processes where many
organizations
are using some form
of Agile methodology, test automation is frequently becoming a requirement
for software
projects. Test automation is often the answer. Test automation means using a
software
tool to run
repeatable tests against the application to be tested. For regression testing
this provides that
responsiveness.
There are many
advantages to test automation. Most are related to the repeatability of the
tests and the
speed at which the
tests can be executed. There are a number of commercial and open source tools
available for
assisting with the development of test automation. Selenium is possibly the
most widelyused
open source
solution. This user’s guide will assist both new and experienced Selenium users
in
learning effective
techniques in building test automation for web applications.
This user’s guide
introduces Selenium, teaches its features, and presents commonly used best
practices
accumulated from
the Selenium community. Many examples are provided. Also, technical information
on the internal
structure of Selenium and recommended uses of Selenium are provided.
Test automation has
specific advantages for improving the long-term efficiency of a software team’s
testing processes.
Test automation supports:
• Frequent
regression testing
• Rapid feedback to
developers
• Virtually
unlimited iterations of test case execution
• Support for Agile
and extreme development methodologies
• Disciplined
documentation of test cases
• Customized defect
reporting
• Finding defects
missed by manual testing
2.2
To Automate or Not to Automate?
Is automation
always advantageous? When should one decide to automate test cases?
5
Selenium
Documentation, Release 1.0
It is not
always advantageous to automate test cases. There are times when
manual testing may be
more appropriate.
For instance, if the application’s user interface will change considerably in
the near
future, then any
automation might need to be rewritten anyway. Also, sometimes there simply is
not
enough time to
build test automation. For the short term, manual testing may be more
effective. If an
application has a
very tight deadline, there is currently no test automation available, and it’s
imperative
that the testing
get done within that time frame, then manual testing is the best solution.
2.3
Introducing Selenium
Selenium is a set
of different software tools each with a different approach to supporting test
automation.
Most Selenium QA
Engineers focus on the one or two tools that most meet the needs of their
project,
however learning
all the tools will give you many different options for approaching different
test automation
problems. The
entire suite of tools results in a rich set of testing functions specifically
geared
to the needs of
testing of web applications of all types. These operations are highly flexible,
allowing
many options for
locating UI elements and comparing expected test results against actual
application
behavior. One of
Selenium’s key features is the support for executing one’s tests on multiple
browser
platforms.
2.4
Brief History of The Selenium Project
Selenium first came
to life in 2004 when Jason Huggins was testing an internal application at
Thought-
Works. Being a
smart guy, he realized there were better uses of his time than manually
stepping through
the same tests with
every change he made. He developed a Javascript library that could drive
interactions
with the page,
allowing him to automatically rerun tests against multiple browsers. That
library
eventually became
Selenium Core, which underlies all the functionality of Selenium Remote Control
(RC) and Selenium
IDE. Selenium RC was ground-breaking because no other product allowed you to
control a browser
from a language of your choice.
While Selenium was
a tremendous tool, it wasn’t without its drawbacks. Because of its Javascript
based
automation engine
and the security limitations browsers apply to Javascript, different things
became
impossible to do.
To make things “worst”, webapps became more and more powerful over time, using
all sorts of
special features new browsers provide and making this restrictions more and
more painful.
In 2006 a plucky
engineer at Google named Simon Stewart started work on a project he called Web-
Driver. Google had
long been a heavy user of Selenium, but testers had to work around the
limitations
of the product.
Simon wanted a testing tool that spoke directly to the browser using the
‘native’ method
for the browser and
operating system, thus avoiding the restrictions of a sandboxed Javascript
environment.
The WebDriver
project began with the aim to solve the Selenium’ pain-points.
Jump to 2008. The
Beijing Olympics mark China’s arrival as a global power, massive mortgage
default
in the United
States triggers the worst international recession since the Great Depression,
The Dark
Knight is viewed by
every human (twice), still reeling from the untimely loss of Heath Ledger. But
the
most important
story of that year was the merging of Selenium and WebDriver. Selenium had
massive
community and
commercial support, but WebDriver was clearly the tool of the future. The
joining of
the two tools
provided a common set of features for all users and brought some of the
brightest minds
in test automation
under one roof. Perhaps the best explanation for why WebDriver and Selenium are
merging was
detailed by Simon Stewart, the creator ofWebDriver, in a joint email to
theWebDriver and
Selenium community
on August 6, 2009.
“Why are the
projects merging? Partly because webdriver addresses some shortcomings in
selenium (by being
able to bypass the JS sandbox, for example. And we’ve got a gorgeous
6
Chapter 2. Introduction
Selenium
Documentation, Release 1.0
API), partly
because selenium addresses some shortcomings in webdriver (such as supporting
a broader range of
browsers) and partly because the main selenium contributors and I
felt that it was
the best way to offer users the best possible framework.”
2.5
Selenium’s Tool Suite
Selenium is
composed of multiple software tools. Each has a specific role.
2.5.1
Selenium 2 (aka. Selenium Webdriver)
Selenium 2 is the
future direction of the project and the newest addition to the Selenium
toolkit. This
brand new
automation tool provides all sorts of awesome features, including a more
cohesive and object
oriented API as
well as an answer to the limitations of the old implementation.
As you can read in
Brief History of The Selenium Project, both the Selenium andWebDriver
developers
agreed that both
tools have advantages and that merging the two projects would make a much more
robust automation
tool.
Selenium 2.0 is the
product of that effort. It supports the WebDriver API and underlying
technology,
along with the
Selenium 1 technology underneath the WebDriver API for maximum flexibility in
porting
your tests. In
addition, Selenium 2 still runs Selenium 1’s Selenium RC interface for
backwards
compatibility.
2.5.2
Selenium 1 (aka. Selenium RC or Remote Control)
As you can read in
Brief History of The Selenium Project, Selenium RC was the main Selenium
project
for a long time,
before the WebDriver/Selenium merge brought up Selenium 2, the newest and more
powerful tool.
Selenium 1 is still
actively supported (mostly in maintenance mode) and provides some features that
may not be
available in Selenium 2 for a while, including support for several languages
(Java, Javascript,
Ruby, PHP, Python,
Perl and C#) and support for almost every browser out there.
2.5.3
Selenium IDE
Selenium IDE
(Integrated Development Environment) is a prototyping tool for building test
scripts. It
is a Firefox plugin
and provides an easy-to-use interface for developing automated tests. Selenium
IDE
has a recording
feature, which records user actions as they are performed and then exports them
as a
reusable script in
one of many programming languages that can be later executed.
Note: Even
though Selenium IDE has a “Save” feature that allows users to keep the tests in
a tablebased
format for later
import and execution, it is not designed to run your test passes nor
is it designed
to build all the
automated tests you will need. Specifically, Selenium IDE doesn’t provide
iteration or
conditional
statements for test scripts. At the time of writing there is no plan to add
such thing. The
reasons are partly
technical and partly based on the Selenium developers encouraging best
practices
in test automation
which always requires some amount of programming. Selenium
IDE is simply
intended as a rapid
prototyping tool. The Selenium developers recommend for serious, robust test
automation either
Selenium 2 or Selenium 1 to be used with one of the many supported programming
languages.
2.5.
Selenium’s Tool Suite 7
Selenium
Documentation, Release 1.0
2.5.4
Selenium-Grid
Selenium-Grid
allows the Selenium RC solution to scale for large test suites and for test suites
that
must be run in
multiple environments. Selenium Grid allows you to run your tests in parallel,
that is,
different tests can
be run at the same time on different remote machines. This has two advantages.
First,
if you have a large
test suite, or a slow-running test suite, you can boost its performance
substantially by
using Selenium Grid
to divide your test suite to run different tests at the same time using those
different
machines. Also, if
you must run your test suite on multiple environments you can have different
remote
machines supporting
and running your tests in them at the same time. In each case Selenium Grid
greatly
improves the time
it takes to run your suite by making use of parallel processing.
2.6
Choosing Your Selenium Tool
Many people get
started with Selenium IDE. If you are not already experienced with a
programming or
scripting language
you can use Selenium IDE to get familiar with Selenium commands. Using the IDE
you can create simple
tests quickly, sometimes within seconds.
We don’t, however,
recommend you do all your test automation using Selenium IDE. To effectively
use
Selenium you will
need to build and run your tests using either Selenium 2 or Selenium 1 in
conjunction
with one of the
supported programming languages. Which one you choose depends on you.
At the time of
writing the Selenium developers are planning on the Selenium-WebDriver API
being the
future direction
for Selenium. Selenium 1 is provided for backwards compatibility. Still, both
have
strengths and
weaknesses which are discussed in the corresponding chapters of this document.
We recommend those
who are completely new to Selenium to read through these sections. However, for
those who are
adopting Selenium for the first time, and therefore building a new test suite
from scratch,
you will probably
want to go with Selenium 2 since this is the portion of Selenium that will
continue to
be supported in the
future.
2.7
Supported Browsers and Platforms
In Selenium 2.0, the
supported browsers vary depending on whether you are using Selenium-WebDriver
or Selenium-RC.
2.7.1
Selenium-WebDriver
Selenium-WebDriver
supports the following browsers along with the operating systems these browsers
are compatible
with.
• Google Chrome
12.0.712.0+
• Internet Explorer
6, 7, 8, 9 - 32 and 64-bit where applicable
• Firefox 3.0, 3.5,
3.6, 4.0, 5.0, 6, 7
• Opera 11.5+
• HtmlUnit 2.9
• Android – 2.3+
for phones and tablets (devices & emulators)
• iOS 3+ for phones
(devices & emulators) and 3.2+ for tablets (devices & emulators)
8
Chapter 2. Introduction
Selenium
Documentation, Release 1.0
Note: At the
time of writing there is an emulator bug with Android 2.3 that prevents the
driver from
working
properly on device emulators. However, it works fine on tablet emulators and
real devices.
2.7.2
Selenium 1.0 and Selenium-RC.
This is the old,
support platfom for Selenium 1.0. It should still apply to the Selenium 2.0
release of
Selenium-RC.
Browser Selenium
IDE Selenium 1 (RC) Operating Systems
Firefox 3.x Record
and playback tests Start browser, run tests Windows, Linux, Mac
Firefox 3 Record
and playback tests Start browser, run tests Windows, Linux, Mac
Firefox 2 Record
and playback tests Start browser, run tests Windows, Linux, Mac
IE 8 Test execution
only via Selenium RC* Start browser, run tests Windows
IE 7 Test execution
only via Selenium RC* Start browser, run tests Windows
IE 6 Test execution
only via Selenium RC* Start browser, run tests Windows
Safari 4 Test
execution only via Selenium RC Start browser, run tests Windows, Mac
Safari 3 Test
execution only via Selenium RC Start browser, run tests Windows, Mac
Safari 2 Test
execution only via Selenium RC Start browser, run tests Windows, Mac
Opera 10 Test
execution only via Selenium RC Start browser, run tests Windows, Linux, Mac
Opera 9 Test
execution only via Selenium RC Start browser, run tests Windows, Linux, Mac
Opera 8 Test
execution only via Selenium RC Start browser, run tests Windows, Linux, Mac
Google Chrome Test
execution only via Selenium RC Start browser, run tests Windows, Linux, Mac
Others Test
execution only via Selenium RC Partial support possible** As applicable
* Tests developed
on Firefox via Selenium IDE can be executed on any other supported browser via
a
simple Selenium RC
command line.
** Selenium RC
server can start any executable, but depending on browser security settings
there may
be technical
limitations that would limit certain features.
2.8
Flexibility and Extensibility
You’ll find that
Selenium is highly flexible. There are many ways you can add functionality to
both
Selenium test
scripts and Selenium’s framework to customize your test automation. This is
perhaps
Selenium’s greatest
strength when compared with other automation tools. These customizations are
described in
various places throughout this document. In addition, since Selenium is Open
Source, the
sourcecode can
always be downloaded and modified.
2.9
What’s in this Book?
This user’s guide
targets both new users and those who have already used Selenium but are seeking
additional
knowledge. We introduce Selenium to new users and we do not assume prior
Selenium experience.
We do assume,
however, that the user has at least a basic understanding of test automation.
For the more
experienced user, this guide can act as a reference. For the more experienced,
we recommend
browsing the
chapter and subheadings. We’ve provided information on the Selenium
architecture,
examples of common
usage, and a chapter on test design techniques.
The remaining
chapters of the reference present:
Selenium IDE Introduces
Selenium IDE and describes how to use it to build test scripts. using the
Selenium Integrated
Development Environment. If you are not experienced in programming, but
2.8.
Flexibility and Extensibility 9
Selenium
Documentation, Release 1.0
still hoping to
learn test automation this is where you should start and you’ll find you can
create
quite a few
automated tests with Selenium IDE. Also, if you are experienced in programming,
this
chapter may still
interest you in that you can use Selenium IDE to do rapid prototyping of your
tests. This section
also demonstrates how your test script can be “exported” to a programming
language for adding
more advanced capabilities not supported by Selenium IDE.
Selenium 2 Explains
how to develop an automated test program using Selenium 2.
Selenium 1 Explains
how to develop an automated test program using the Selenium RC API. Many
examples are
presented in both programming languages and scripting languages. Also, the
installation
and setup of
Selenium RC is covered here. The various modes, or configurations, that
Selenium RC
supports are described, along with their trade-offs and limitations. An
architecture
diagram is provided
to help illustrate these points. Solutions to common problems frequently
difficult
for new Sel-R users
are described here, for instance, handling Security Certificates, https
requests, pop-ups,
and the opening of new windows.
Test Design
Considerations This chapter presents programming techniques for use with
Selenium-
WebDriver and
Selenium RC. We also demonstrate techniques commonly asked about in the user
forum such as how
to design setup and teardown functions, how to implement data-driven tests
(tests where one
can vary the data between test passes) and other methods of programming common
test automation
tasks.
Selenium-Grid
This chapter is not yet developed.
User
extensions Describes ways that Selenium can be modified, extended and customized.
2.10
The Documentation Team–Authors Past and Present
In alphabetical
order, the following people have made significant contributions to the
authoring of this
user’s guide, its
publishing infrastructure, or both. We are very grateful to all of them.
• Dave Hunt
• Luke
Inman-Semerau
• Mary Ann
May-Pumphrey
• Noah Sussman
• Paul Grandjean
• Peter Newhook
• Santiago
Suarez-Ordonez
• Simon Stewart
• Tarun
Kumar
2.10.1
Acknowledgements
A special thanks
goes to Patrick Lightbody. As an administrator of the SeleniumHQ website, major
contributor to
Selenium RC, his support was invaluable when writing the first release of the
user’s
guide. Patrick
helped us understand our audience. He also set us up with everything we needed
on the
10
Chapter 2. Introduction
Selenium
Documentation, Release 1.0
seleniumhq.org
website for publishing the documents. Also a thanks goes to Andras Hatvani for
his
advice on
publishing solutions, and to Amit Kumar for participating in our discussions
and for assisting
with reviewing the
document.
And of course, we
must recognize the Selenium Developers. They have truly
designed an amazing tool.
Without the vision
of the original designers, and the continued efforts of the current developers,
we
would not have such
a great tool to pass on to you.
2.10.
The Documentation Team–Authors Past and Present 11
Selenium
Documentation, Release 1.0
12
Chapter 2. Introduction
CHAPTER
THREE
SELENIUM-IDE
3.1
Introduction
The Selenium-IDE
(Integrated Development Environment) is the tool you use to develop your
Selenium
test cases. It’s an
easy-to-use Firefox plug-in and is generally the most efficient way to develop
test
cases. It also
contains a context menu that allows you to first select a UI element from the
browser’s
currently displayed
page and then select from a list of Selenium commands with parameters
pre-defined
according to the
context of the selected UI element. This is not only a time-saver, but also an
excellent
way of learning
Selenium script syntax.
This chapter is all
about the Selenium IDE and how to use it effectively.
3.2
Installing the IDE
Using Firefox,
first, download the IDE from the SeleniumHQ downloads page
Firefox will
protect you from installing addons from unfamiliar locations, so you will need
to click
‘Allow’ to proceed
with the installation, as shown in the following screenshot.
13
Selenium
Documentation, Release 1.0
When downloading
from Firefox, you’ll be presented with the following window.
Select Install Now.
The Firefox Add-ons window pops up, first showing a progress bar, and when the
14
Chapter 3. Selenium-IDE
Selenium
Documentation, Release 1.0
download is
complete, displays the following.
Restart Firefox.
After Firefox reboots you will find the Selenium-IDE listed under the Firefox
Tools
menu.
3.2.
Installing the IDE 15
Selenium
Documentation, Release 1.0
3.3
Opening the IDE
To run the
Selenium-IDE, simply select it from the Firefox Tools menu. It opens as follows
with an
empty
script-editing window and a menu for loading, or creating new test cases.
16
Chapter 3. Selenium-IDE
Selenium
Documentation, Release 1.0
3.4
IDE Features
3.4.1
Menu Bar
The File menu has
options for Test Case and Test Suite (suite of Test Cases). Using these you can
add a
new Test Case, open
a Test Case, save a Test Case, export Test Case in a language of your choice.
You
can also open the
recent Test Case.All these options are also available for Test Suite.
The Edit menu
allows copy, paste, delete, undo, and select all operations for editing the
commands in
your test case. 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. The Help menu is the standard
Firefox Help
menu; only one item
on this menu–UI-Element Documentation–pertains to Selenium-IDE.
3.4.2
Toolbar
The toolbar
contains buttons for controlling the execution of your test cases, including a
step feature for
debugging your test
cases. The right-most button, the one with the red-dot, is the record button.
3.4.
IDE Features 17
Selenium
Documentation, Release 1.0
Speed Control:
controls how fast your test case runs.
Run All: Runs the
entire test suite when a test suite with multiple test cases is loaded.
Run: Runs the
currently selected test. When only a single test is loaded this button and the
Run
All button have the
same effect.
Pause/Resume:
Allows stopping and re-starting of a running test case.
Step: Allows you to
“step” through a test case by running it one command at a time. Use for
debugging test
cases.
TestRunner Mode:
Allows you to run the test case in a browser loaded with the Selenium-Core
TestRunner. The
TestRunner is not commonly used now and is likely to be deprecated. This
button is for
evaluating test cases for backwards compatibility with the TestRunner. Most
users
will probably not
need this button.
Apply Rollup Rules:
This advanced feature allows repetitive sequences of Selenium commands
to be grouped into
a single action. Detailed documentation on rollup rules can be found in the
UI-Element
Documentation on the Help menu.
Record: Records the
user’s browser actions.
3.4.3
Test Case Pane
Your script is
displayed in the test case pane. It has two tabs, one for displaying the
command and their
parameters in a
readable “table” format.
The other tab -
Source displays the test case in the native format in which the file will be
stored. By
default, this is
HTML although it can be changed to a programming language such as Java or C#,
or a
scripting language
like Python. See the Options menu for details. The Source view also allows one
to
edit the test case in
its raw form, including copy, cut and paste operations.
The Command,
Target, and Value entry fields display the currently selected command along
with its
parameters. These
are entry fields where you can modify the currently selected command. The first
18
Chapter 3. Selenium-IDE
Selenium
Documentation, Release 1.0
parameter specified
for a command in the Reference tab of the bottom pane always goes in the Target
field. If a second
parameter is specified by the Reference tab, it always goes in the Value field.
If you start typing
in the Command field, a drop-down list will be populated based on the first
characters
you type; you can
then select your desired command from the drop-down.
3.4.4
Log/Reference/UI-Element/Rollup Pane
The bottom pane is
used for four different functions–Log, Reference, UI-Element, and Rollup–
depending on which
tab is selected.
Log
When you run your
test case, error messages and information messages showing the progress are
displayed
in this pane automatically,
even if you do not first select the Log tab. These messages are often
useful for test
case debugging. Notice the Clear button for clearing the Log. Also notice the
Info button
is a drop-down
allowing selection of different levels of information to log.
Reference
The Reference tab
is the default selection whenever you are entering or modifying Selenese
commands
and parameters in
Table mode. In Table mode, the Reference pane will display documentation on the
current command.
When entering or modifying commands, whether from Table or Source mode, it is
critically
important to ensure that the parameters specified in the Target and Value
fields match those
specified in the
parameter list in the Reference pane. The number of parameters provided must
match
the number
specified, the order of parameters provided must match the order specified, and
the type of
parameters provided
must match the type specified. If there is a mismatch in any of these three
areas,
the command will
not run correctly.
While the Reference
tab is invaluable as a quick reference, it is still often necessary to consult
the
Selenium Reference
document.
3.4.
IDE Features 19
Selenium
Documentation, Release 1.0
UI-Element
and Rollup
Detailed information
on these two panes (which cover advanced features) can be found in the
UIElement
Documentation on
the Help menu of Selenium-IDE.
3.5
Building Test Cases
There are three
primary methods for developing test cases. Frequently, a test developer will
require all
three techniques.
3.5.1
Recording
Many first-time
users begin by recording a test case from their interactions with a website.
When
Selenium-IDE is
first opened, the record button is ON by default. If you do not want
Selenium-IDE
to begin recording
automatically you can turn this off by going under Options > Options... and
deselecting
“Start recording
immediately on open.”
During recording,
Selenium-IDE will automatically insert commands into your test case based on
your
actions. Typically,
this will include:
• clicking a link -
click or clickAndWait commands
• entering values -
type command
• selecting options
from a drop-down listbox - select command
• clicking
checkboxes or radio buttons - click command
Here are some
“gotchas” to be aware of:
• The type
command may require clicking on some other area of the web page
for it to record.
• Following a link
usually records a click command. You will often
need to change this to clickAnd-
Wait to
ensure your test case pauses until the new page is completely loaded.
Otherwise, your test
case will continue
running commands before the page has loaded all its UI elements. This will
cause unexpected
test case failures.
3.5.2
Adding Verifications and Asserts With the Context Menu
Your test cases
will also need to check the properties of a web-page. This requires assert
and verify
commands. We won’t
describe the specifics of these commands here; that is in the chapter on
Selenium
Commands –
“Selenese”. Here we’ll simply describe how to add them to your test case.
With Selenium-IDE
recording, go to the browser displaying your test application and right click
anywhere
on the page. You
will see a context menu showing verify and/or
assert commands.
The first time you
use Selenium, there may only be one Selenium command listed. As you use the IDE
however, you will
find additional commands will quickly be added to this menu. Selenium-IDE will
attempt to predict
what command, along with the parameters, you will need for a selected UI
element
on the current
web-page.
Let’s see how this
works. Open a web-page of your choosing and select a block of text on the page.
A
paragraph or a
heading will work fine. Now, right-click the selected text. The context menu
should give
you a verifyTextPresent
command and the suggested parameter should be the text itself.
20
Chapter 3. Selenium-IDE
Selenium
Documentation, Release 1.0
Also, notice the
Show All Available Commands menu option. This shows many, many more commands,
again, along with
suggested parameters, for testing your currently selected UI element.
Try a few more UI
elements. Try right-clicking an image, or a user control like a button or a
checkbox.
You may need to use
Show All Available Commands to see options other than verifyTextPresent.
Once
you select these
other options, the more commonly used ones will show up on the primary context
menu. For example,
selecting verifyElementPresent for an image should later
cause that command to be
available on the
primary context menu the next time you select an image and right-click.
Again, these
commands will be explained in detail in the chapter on Selenium commands. For
now
though, feel free
to use the IDE to record and select commands into a test case and then run it.
You can
learn a lot about
the Selenium commands simply by experimenting with the IDE.
3.5.3
Editing
Insert
Command
Table
View
Select the point in
your test case where you want to insert the command. To do this, in the Test
Case
Pane, left-click on
the line where you want to insert a new command. Right-click and select Insert
Command; the IDE
will add a blank line just ahead of the line you selected. Now use the command
editing text fields
to enter your new command and its parameters.
Source
View
Select the point in
your test case where you want to insert the command. To do this, in the Test
Case
Pane, left-click
between the commands where you want to insert a new command, and enter the HTML
tags needed to
create a 3-column row containing the Command, first parameter (if one is
required by the
Command), and
second parameter (again, if one is required). Be sure to save your test before
switching
back to Table view.
Insert
Comment
Comments may be
added to make your test case more readable. These comments are ignored when the
test case is run.
Comments may also
be used to add vertical white space (one or more blank lines) in your tests;
just
create empty
comments. An empty command will cause an error during execution; an empty
comment
won’t.
Table
View
Select the line in
your test case where you want to insert the comment. Right-click and select
Insert
Comment. Now use
the Command field to enter the comment. Your comment will appear in purple
text.
Source
View
Select the point in
your test case where you want to insert the comment. Add an HTML-style comment,
i.e., <!--
your comment here -->.
3.5.
Building Test Cases 21
Selenium
Documentation, Release 1.0
Edit
a Command or Comment
Table
View
Simply select the
line to be changed and edit it using the Command, Target, and Value fields.
Source
View
Since Source view
provides the equivalent of a WYSIWYG (What You See is What You Get) editor,
simply modify which
line you wish–command, parameter, or comment.
3.5.4
Opening and Saving a Test Case
Like most programs,
there are Save and Open commands under the File menu. However, Selenium
distinguishes
between test cases and test suites. To save your Selenium-IDE tests for later
use you can
either save the
individual test cases, or save the test suite. If the test cases of your test
suite have not
been saved, you’ll
be prompted to save them before saving the test suite.
When you open an
existing test case or suite, Selenium-IDE displays its Selenium commands in the
Test
Case Pane.
3.6
Running Test Cases
The IDE allows many
options for running your test case. You can run a test case all at once, stop
and
start it, run it
one line at a time, run a single command you are currently developing, and you
can do a
batch run of an
entire test suite. Execution of test cases is very flexible in the IDE.
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.
3.7
Using Base URL to Run Test Cases in Different Domains
The Base
URL field at the top of the Selenium-IDE window is very useful for
allowing test cases to be
run across
different domains. Suppose that a site named http://news.portal.com had an in-house
beta
22
Chapter 3. Selenium-IDE
Selenium
Documentation, Release 1.0
site named
http://beta.news.portal.com. Any test cases for these sites that begin with an open
statement
should specify a relative
URL as the argument to open rather
than an absolute URL (one starting with a
protocol such as
http: or https:). Selenium-IDE will then create an absolute URL by appending
the open
command’s argument
onto the end of the value of Base URL. For example, the test case below would
be
run against
http://news.portal.com/about.html:
This same test case
with a modified Base URL setting would be run against
http://beta.news.portal.com/about.html:
3.8
Selenium Commands – “Selenese”
Selenium commands,
often called selenese, are the set of commands that run your tests.
A sequence of
these commands is a
test script. Here we explain those commands in detail, and
we present the many
choices you have in
testing your web application when using Selenium.
Selenium provides a
rich set of commands for fully testing your web-app in virtually any way you
can imagine. The
command set is often called selenese. These commands
essentially create a testing
language.
In selenese, one
can test the existence of UI elements based on their HTML tags, test for
specific content,
test for broken
links, input fields, selection list options, submitting forms, and table data
among other
things. In addition
Selenium commands support testing of window size, mouse position, alerts, Ajax
functionality, pop
up windows, event handling, and many other web-application features. The Command
Reference lists
all the available commands.
A command
is what tells Selenium what to do. Selenium commands come in three
“flavors”: Actions,
Accessors,
and Assertions.
• Actions
are commands that generally manipulate the state of the
application. They do things like
“click this link”
and “select that option”. If an Action fails, or has an error, the execution of
the
current test is stopped.
3.8.
Selenium Commands – “Selenese” 23
Selenium
Documentation, Release 1.0
Many Actions can be
called with the “AndWait” suffix, e.g. “clickAndWait”. This suffix tells
Selenium that the
action will cause the browser to make a call to the server, and that Selenium
should wait for a
new page to load.
• Accessors
examine the state of the application and store the results in
variables, e.g. “storeTitle”.
They are also used
to automatically generate Assertions.
• Assertions
are like Accessors, but they verify that the state of the
application conforms to what
is expected.
Examples include “make sure the page title is X” and “verify that this checkbox
is
checked”.
All Selenium
Assertions can be used in 3 modes: “assert”, “verify”, and ” waitFor”. For
example,
you can
“assertText”, “verifyText” and “waitForText”. When an “assert” fails, the test
is aborted.
When a “verify”
fails, the test will continue execution, logging the failure. This allows a
single
“assert” to ensure
that the application is on the correct page, followed by a bunch of “verify”
assertions to test
form field values, labels, etc.
“waitFor” commands
wait for some condition to become true (which can be useful for testing
Ajax applications).
They will succeed immediately if the condition is already true. However, they
will fail and halt
the test if the condition does not become true within the current timeout
setting
(see the setTimeout
action below).
3.9
Script Syntax
Selenium commands
are simple, they consist of the command and two parameters. For example:
verifyText
//div//a[2] Login
The parameters are
not always required; it depends on the command. In some cases both are
required,
in others one
parameter is required, and in still others the command may take no parameters
at all. Here
are a couple more
examples:
goBackAndWait
verifyTextPresent
Welcome to My Home Page
type id=phone (555)
666-7066
type id=address1
${myVariableAddress}
The command
reference describes the parameter requirements for each command.
Parameters vary,
however they are typically:
• a locator
for identifying a UI element within a page.
• a text
pattern for verifying or asserting expected page content
• a text
pattern or a selenium variable for entering text in an input field or for
selecting an option
from an option
list.
Locators, text
patterns, selenium variables, and the commands themselves are described in
considerable
detail in the
section on Selenium Commands.
Selenium scripts
that will be run from Selenium-IDE will be be stored in an HTML text file
format.
This consists of an
HTML table with three columns. The first column identifies the Selenium
command,
the second is a
target, and the final column contains a value. The second and third columns may
not
require values
depending on the chosen Selenium command, but they should be present. Each
table row
represents a new
Selenium command. Here is an example of a test that opens a page, asserts the
page
title and then
verifies some content on the page:
24
Chapter 3. Selenium-IDE
Selenium
Documentation, Release 1.0
<table>
<tr><td>open</td><td>/download/</td><td></td></tr>
<tr><td>assertTitle</td><td></td><td>Downloads</td></tr>
<tr><td>verifyText</td><td>//h2</td><td>Downloads</td></tr>
</table>
Rendered as a table
in a browser this would look like the following:
open /download/
assertTitle
Downloads
verifyText //h2
Downloads
The Selenese HTML
syntax can be used to write and run tests without requiring knowledge of a
programming
language. With a
basic knowledge of selenese and Selenium-IDE you can quickly produce
and run testcases.
3.10
Test Suites
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.
An example tells it
all.
<html>
<head>
<title>Test
Suite Function Tests - Priority 1</title>
</head>
<body>
<table>
<tr><td><b>Suite
Of Tests</b></td></tr>
<tr><td><a
href= "./Login.html" >Login</a></td></tr>
<tr><td><a
href= "./SearchValues.html" >Test
Searching for Values</a></td></tr>
<tr><td><a
href= "./SaveValues.html" >Test
Save</a></td></tr>
</table>
</body>
</html>
A file similar to
this would allow running the tests all at once, one after another, from the
Selenium-IDE.
Test suites can
also be maintained when using Selenium-RC. This is done via programming and can
be
done a number of
ways. Commonly Junit is used to maintain a test suite if one is using
Selenium-RC
with Java.
Additionally, if C# is the chosen language, Nunit could be employed. If using
an interpreted
language like
Python with Selenium-RC than some simple programming would be involved in
setting
up a test suite.
Since the whole reason for using Selenium-RC is to make use of programming
logic for
your testing this
usually isn’t a problem.
3.11
Commonly Used Selenium Commands
To conclude our
introduction of Selenium, we’ll show you a few typical Selenium commands. These
are probably the
most commonly used commands for building tests.
3.10.
Test Suites 25
Selenium
Documentation, Release 1.0
open opens
a page using a URL.
click/clickAndWait performs
a click operation, and optionally waits for a new page to load.
verifyTitle/assertTitle
verifies an expected page title.
verifyTextPresent verifies
expected text is somewhere on the page.
verifyElementPresent
verifies an expected UI element, as defined by its HTML tag, is
present on the
page.
verifyText verifies
expected text and its corresponding HTML tag are present on the page.
verifyTable verifies
a table’s expected contents.
waitForPageToLoad pauses
execution until an expected new page loads. Called automatically when
clickAndWait is
used.
waitForElementPresent
pauses execution until an expected UI element, as defined by its
HTML tag,
is present on the
page.
3.12
Verifying Page Elements
Verifying UI
elements on a web page is probably the most common feature of your automated
tests.
Selenese allows
multiple ways of checking for UI elements. It is important that you understand
these
different methods
because these methods define what you are actually testing.
For example, will
you test that...
1. an element is
present somewhere on the page?
2. specific text is
somewhere on the page?
3. specific text is
at a specific location on the page?
For example, if you
are testing a text heading, the text and its position at the top of the page
are probably
relevant for your
test. If, however, you are testing for the existence of an image on the home
page, and
the web designers
frequently change the specific image file along with its position on the page,
then you
only want to test
that an image (as opposed to the specific image file) exists somewhere
on the page.
3.13
Assertion or Verification?
Choosing between
“assert” and “verify” comes down to convenience and management of failures.
There’s very little
point checking that the first paragraph on the page is the correct one if your
test
has already failed
when checking that the browser is displaying the expected page. If you’re not
on the
correct page,
you’ll probably want to abort your test case so that you can investigate the
cause and fix
the issue(s)
promptly. On the other hand, you may want to check many attributes of a page
without
aborting the test
case on the first failure as this will allow you to review all failures on the
page and take
the appropriate
action. Effectively an “assert” will fail the test and abort the current test
case, whereas a
“verify” will fail
the test and continue to run the test case.
The best use of
this feature is to logically group your test commands, and start each group
with an
“assert” followed
by one or more “verify” test commands. An example follows:
26
Chapter 3. Selenium-IDE
Selenium
Documentation, Release 1.0
Command Target
Value
open /download/
assertTitle
Downloads
verifyText //h2
Downloads
assertTable 1.2.1
Selenium IDE
verifyTable 1.2.2
June 3, 2008
verifyTable 1.2.3
1.0 beta 2
The above example
first opens a page and then “asserts” that the correct page is loaded by
comparing
the title with the
expected value. Only if this passes will the following command run and “verify”
that
the text is present
in the expected location. The test case then “asserts” the first column in the
second
row of the first
table contains the expected value, and only if this passed will the remaining
cells in that
row be “verified”.
3.13.1
verifyTextPresent
The command verifyTextPresent
is used to verify specific text exists somewhere on the page.
It
takes a single
argument–the text pattern to be verified. For example:
Command Target
Value
verifyTextPresent
Marketing Analysis
This would cause
Selenium to search for, and verify, that the text string “Marketing Analysis”
appears
somewhere on the
page currently being tested. Use verifyTextPresent when
you are interested
in only the text
itself being present on the page. Do not use this when you also need to test
where the
text occurs on the
page.
3.13.2
verifyElementPresent
Use this command
when you must test for the presence of a specific UI element, rather then its
content.
This verification
does not check the text, only the HTML tag. One common use is to check for the
presence of an
image.
Command Target
Value
verifyElementPresent
//div/p/img
This command
verifies that an image, specified by the existence of an <img> HTML tag,
is present on
the page, and that
it follows a <div> tag and a <p> tag. The first (and only)
parameter is a locator for
telling the
Selenese command how to find the element. Locators are explained in the next
section.
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.
Command Target
Value
verifyElementPresent
//div/p
verifyElementPresent
//div/a
verifyElementPresent
id=Login
verifyElementPresent
link=Go to Marketing Research
verifyElementPresent
//a[2]
verifyElementPresent
//head/title
These examples
illustrate the variety of ways a UI element may be tested. Again, locators are
explained
in the next
section.
3.13.
Assertion or Verification? 27
Selenium
Documentation, Release 1.0
3.13.3
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.
Command Target
Value
verifyText
//table/tr/td/div/p This is my text and it occurs right after the div inside
the table.
3.14
Locating Elements
For many Selenium
commands, a target is required. 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.
The locator type can be omitted in many cases. The various locator
types are explained
below with examples for each.
3.14.1
Locating by Identifier
This is probably
the most common method of locating elements and is the catch-all default when
no
recognized locator
type is used. With this strategy, the first element with the id attribute value
matching
the location will
be used. If no element has a matching id attribute, then the first element with
a name
attribute matching
the location will be used.
For instance, 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"
/>
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=password
(5)
• identifier=continue
(6)
• continue
(6)
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.
28
Chapter 3. Selenium-IDE
Selenium
Documentation, Release 1.0
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>
• id=loginForm
(3)
Locating
by Name
The name locator
type will locate the first element with a matching name attribute. If multiple
elements
have the same value
for a name attribute, then you can use filters to further refine your location
strategy.
The default filter
type is value (matching the value 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>
• name=username
(4)
• name=continue
value=Clear (7)
• name=continue
Clear (7)
• name=continue
type=button (7)
Note: Unlike
some types of XPath and DOM locators, the three types of locators above allow
Selenium
to test a UI
element independent of its location on the page. So if the page structure and
organization is
altered, the test
will still pass. You may or may not want to also test whether the page
structure changes.
In the case where
web designers frequently alter the page, but its functionality must be
regression tested,
testing via id and
name attributes, or really via any HTML property, becomes very important.
Locating
by XPath
XPath is the
language used for locating nodes in an XML document. As HTML can be an
implementation
of XML (XHTML),
Selenium users can leverage this powerful language to target elements in their
web applications.
XPath extends beyond (as well as supporting) the simple methods of locating by
id
you have enclosed with lot of innovative informations in your article.i really enjoyed with your informations.
ReplyDeleteSelenium Training in Chennai
selenium training in anna nagar
JAVA Training in Chennai
Python Training in Chennai
Big data training in chennai
Android Training in Chennai
Selenium Training in Annanagar