You are here: Browse Railsplugins Selenium Testing
= This plugin extends the rails testing framework to allow you to write Selenium tests in the same way as unit and functional tests.
Plugin: script/plugin install http://svn.viney.net.nz/things/rails/plugins/selenium_testing
Selenium: rake install_selenium (or manually unpack Selenium into vendor/selenium)
Generate a test stub: script/generate selenium_test person # Add your tests into test/selenium/person_test.rb, see below for details
Start server with test environment: # The plugin will only load in the test environment script/server -e test
Open your browser and run the tests: http://localhost:3000/selenium
Tests are written in the same way as unit and functional tests. The method calls in the test (click, type, assert_visible etc… ) correspond to Selenium commands/assertions. See the Selenium documentation for a full listing of available commands/assertions. You can NOT use Test::Unit assertions (assert, assert_equal etc…), you must use Selenium assertions.
class PersonSeleniumTest < Test::Unit::TestCase
fixtures :people, :households
end
def setup
open :controller => 'person', :action => 'view', :id => 1
end
def test_add_new_person
click 'add_new_person_link'
assert_visible 'add_new_person'
type 'new_person_first_name', 'Pixel'
type 'new_person_last_name', 'the Cat'
select 'new_person_gender', 'Male'
click_and_wait 'submit_add_new_person'
assert_text 'person_name', 'Pixel the Cat'
end
def test_household
people(:jonathan).householders.each do |householder|
assert_visible "householder_#{householder.id}"
end
end
Selenium IDE (http://www.openqa.org/selenium-ide/) gives you a way of recording tests by simply using your application. Once you have installed the Firefox extension, select Tools -> Selenium IDE. Put Selenium IDE into Ruby mode by selecting Options -> Format -> Ruby. Selenium IDE will automatically be in record mode, so start clicking on things and using your application. You will see Selenium commands being generated. Once you are finished, flip to the Source tab and you will see a class definition with a single method. Just copy the method into your Selenium test class. Done!
You can group tests into test suites so certain tests can easily be run together. To do this, add the file test/selenium/suites.rb. You can add entire TestCases into a suite, or select individual tests.
suites.rb:
SeleniumTestSuite.new 'My test suite',
PersonSeleniumTest, # Run all the tests in this class
HouseholdSeleniumTest.new(:test_add_household) # Select a single test
Once you have defined one or more test suites, you will see a select box at the top of the upper left frame in the browser. Just select the test suite you want to run and you’re good to go.
To automatically run all your Selenium tests, use the test_selenium rake task. You can define which browsers are used in config/environment.rb. Default paths are used unless you specify others.
SeleniumConfig.set do |c|
c.browser :ie
c.browser :firefox, 'C:\Program Files\Mozilla Firefox\firefox.exe' # Path is optional
end
You can define the environment(s) that the plugin will load in using SeleniumConfig in config/environment.rb, eg:
SeleniumConfig.set do |c|
c.environments :test, :development
end
Selenium supports having a user-extensions.js file with custom commands and asertions. If you wish to use this feature, place your user-extensions.js file in test/selenium along with your test files.
http://svn.viney.net.nz/things/rails/plugins/selenium_testing
- Improve the continuous integration testing, probably using a driven
approach with the Selenium/Ruby driver. This will allow errors to be reported for tests,
as well as giving much more control over the entire procedure.
- More documentation/examples
- Tests!!
Jonas Bengtsson http://andthennothing.net/archives/2006/02/05/selenium-on-rails
For more help and/or other questions, feel free to email me at jonathan@bluewire.net.nz
NOTE: This description has been extracted from the Plugin README and so the formatting may need updating to make browser friendly