190 likes | 579 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.
E N D
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