Douglas' slides - NovaRUG

cabbagepatchtapeInternet and Web Development

Feb 5, 2013 (4 years and 6 months ago)

246 views

Selenium and Selenium on Rails

Agenda


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:
www.openqa.org


Getting started:


Download Selenium core off of
www.openqa.org


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


Go to http://web
-
server
-
host/selenium
-
core/index.html

Simple Selenium Tests


Selenium understands two types of files


Tests


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
samples


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:


Actions


Command the browser to do something


Accessors


Store/retrieve data from selenium variables


Asserts


Verify that the browser is in a certain state

Format of a Selenium Test


Two types of Selenium Parameters


Locators


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
expressions


Lots more info at: http://www.openqa.org/selenium
-
core/reference.html


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
-
extensions.js


Firebug is very useful for developing your
accessors

Selenium IDE


Firefox extension that allows recording and
editing of tests


Can be download off of www.openqa.org


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
commands


more info at:
http://www.openqa.org/classes/SeleniumOnRails/TestBuilder.
html

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

?