Douglas' slides - NovaRUG

cabbagepatchtapeInternet and Web Development

Feb 5, 2013 (6 years and 1 month ago)


Selenium and Selenium on Rails


Overview of Selenium

Simple Selenium Tests

Selenium IDE

Overview of Selenium on Rails

Problems with Selenium

Selenium Overview

Selenium is composed of four things:

Selenium Core

Selenium IDE

Selenium RC

Selenium on Rails

Overview of Selenium

Open source browser based integration test framework
built originally by Thoughtworks

100% Javascript and HTML

Designed to make test writing easy

Ability to run whole suites of tests or individual tests

Ability to step through individual tests

Cross browser

IE 6/7, Firefox .8+, Opera, Safari 2.0+

Lets see an example of a selenium test suite…

Overview of Selenium

Downloads and Documentation can be found at:

Getting started:

Download Selenium core off of

Place the contents of the zip file on a web server in a
core directory

Go to http://web

Simple Selenium Tests

Selenium understands two types of files


Test Suites

Every test must be contained within a test suite

Both tests and test suites are defined by using
simple tables in HTML

To execute a test suite you must point
TestRunner.html at it

Format of Selenium Test Suite

More complex than Selenium Tests

Easiest just to copy TestSuite.html from the

Mostly a table that points to the tests

Format of a Selenium Test

HTML Table with 3 columns

First Column: Selenium command

Second Column: Required first parameter

Third Column: Optional second parameter

Selenium commands are broken into 3 types:


Command the browser to do something


Store/retrieve data from selenium variables


Verify that the browser is in a certain state

Format of a Selenium Test

Two types of Selenium Parameters


Used to find elements in html trees

Pattern Matchers

Used to verify values

Lots of locator types. Some examples are: Id based,
xpath based, css selector based

Pattern matchers are typically exact matches or regular

Lots more info at:

So lets try to write a simple Selenium test…

Gotchas in HTML Selenium Test Writing

Selenium is sensitive to the format of the table

All selenium command rows must have three columns or
they will not be recognized as commands

You can only test URL’s that are in the same domain as
the selenium core

Separation of concerns is hard

Tests become very
dependent on the internal structure of the HTML

Wow, that was hard!

Lesson learned: Never ever write this by hand

There are a lot of commands

you can even add
your own custom commands into the user

Firebug is very useful for developing your

Selenium IDE

Firefox extension that allows recording and
editing of tests

Can be download off of

Allows easier development of tests

Can even output Ruby for it’s Ruby based API

Lets see it in action…

Selenium IDE

Much easier to use

Only really works with synchronous requests

Only automates commands, assert still must be
entered by hand

Still requires lots of work to get Selenium to run
it as part of a Test Suite

Selenium on Rails

Plugin for Rails that allows tests to be expressed in Ruby

Selenium core files no longer go in public

they are part
of the Plugin

Supports two kinds of files SEL files and RSEL files

SEL files are pipe separated files that look much like
Selenium HTML

RSEL files talk to a Ruby API that closely mirrors the normal

more info at:

Selenium on Rails

Each test becomes a single RSEL file which contains
Ruby calls closely resembling the Selenium Commands

RSEL files work much like views in Ruby and can be
broken down into partials

Selenium on Rails takes over the /selenium/ URL space

RSEL files are used to automatically generate Selenium
HTML table based tests

Selenium on Rails then generates it’s own Test Suite
containing all of the tests

Selenium on Rails

RSEL files can reference fixtures and clear
session state on startup

RSEL files support partials

Test development is much more Rails like
Edit RSEL file, hit Reload in browser, run
updated test

Lets see it in action…

That was still pretty hard…

Selenium on Rails does not initially make WRITING tests
any easier

Selenium on Rails makes deploying and the
development cycle of tests easier

Selenium on Rails makes writing tests more natural for
RoR developers

it also gives your tests access to the
rest of the code you have developed for your application

Selenium on Rails should really be seen as a starting
point for developing a DSL to test YOUR application

Problems with Selenium

The Xpath locators are basically worthless because of
the poor performance in IE

It is not designed to do AJAX type testing

waitForElement and waitForCondition are the tools that
Selenium provides to deal with AJAX both of which add
a lot of complexity to tests

Custom Selenium commands added to user
extensions.js are difficult to write

Avoid doing so unless
you must

Timeouts are unreliable

sometimes tests hang

Not all Javascript events are supported