fnando / selenium-on-rails forked from paytonrules/selenium-on-rails

The "official" Selenium On Rails repository, synced with OpenQA.

This URL has Read+Write access

name age message
file .gitignore Mon Mar 02 04:10:03 -0800 2009 Merge branch 'master' of git@github.com:paytonr... [paytonrules]
file CHANGELOG Sat Feb 03 15:08:04 -0800 2007 Adding missing require statements and documenta... [sauy7]
file LICENSE-2.0.txt Wed Aug 02 13:57:13 -0700 2006 Updated documentation Re-licensed under Apache ... [Jonas]
file README Sat Mar 07 05:41:11 -0800 2009 Merge commit 'official/master' [fnando]
file Rakefile Fri Feb 20 20:29:57 -0800 2009 Changing rcov to display only reports from the ... [Tapajós]
directory doc/ Sat Feb 03 15:08:04 -0800 2007 Adding missing require statements and documenta... [sauy7]
directory generators/ Mon Jul 31 15:06:35 -0700 2006 r828@D600 (orig r13): dev | 2006-06-06 12:03:... [Jonas]
file init.rb Sun Jan 25 07:46:02 -0800 2009 Now you can use Ruby to configure you config.ym... [Tapajós]
directory lib/ Mon Mar 02 04:10:03 -0800 2009 Merge branch 'master' of git@github.com:paytonr... [paytonrules]
directory log/ Tue Nov 04 05:41:55 -0800 2008 Finally fixed an issue with test:acceptance tha... [eric@8thlight.com]
file routes.rb Mon Nov 10 06:37:29 -0800 2008 Corrected the routes for when the server is sta... [eric@8thlight.com]
directory selenium-core/ Fri Feb 27 15:43:00 -0800 2009 Added Mozilla privilege; required for file uplo... [fnando]
file selenium.yml.example Mon Mar 02 04:10:03 -0800 2009 Merge branch 'master' of git@github.com:paytonr... [paytonrules]
directory tasks/ Mon Jul 31 15:03:55 -0700 2006 r818@D600 (orig r12): dev | 2006-05-12 23:36:... [Jonas]
directory test/ Mon Mar 02 04:10:03 -0800 2009 Merge branch 'master' of git@github.com:paytonr... [paytonrules]
directory test_data/ Fri Feb 20 17:32:00 -0800 2009 Fix to permit run tests after clone without do ... [Tapajós]
README
Installation for rails versions before Rails 2.1

Rails has been changed in ways that break the original versions of Selenium on Rails. If you're using versions before 
Rails 2.1 you need to use this release. There are no plans to update this release with new changes or bug fixes unless 
there is sufficient demand, so if you can update then do so.

   1. Install Selenium on Rails: script/plugin install 
   http://svn.openqa.org/svn/selenium-on-rails/tags/pre-rails-2-1/selenium-on-rails
   2. If you‘re on Windows, gem install win32-open3
   3. If the RedCloth gem is available the Selenese test cases can use it for better markup.
   4. Run the Rakefile in the plugin‘s directory to run the tests in order to see that everything works. (If RedCloth is
   n‘t installed a few tests will fail since they assume RedCloth is installed.)
   5. Create a test case: script/generate selenium login
   6. Start the server: script/server -e test
   7. Point your browser to localhost:3000/selenium
   8. If everything works as expected you should see the Selenium test runner. The north east frame contains all your 
   test cases (just one for now), and the north frame contains your test case.

Formats

The test cases can be written in a number of formats. Which one you choose is a matter of taste. You can generate your 
test files by running script/generate selenium or by creating them manually in your /test/selenium directory.
RSelenese, .rsel

RSelenese enable you to write your tests in Ruby. This is my favorite format.

 setup :fixtures => :all
 open '/'
 assert_title 'Home'
 ('a'..'z').each {|c| open :controller => 'user', :action => 'create', :name => c }

See SeleniumOnRails::TestBuilder for available commands. This is also available in the SeleniumIDE, using the format 
here. IMPORTANT NOTE: RSelenese generates the HTML tables for Selenium behind the scenes when the page is loaded - ONCE. 
That means code like this:

  (1..10).each do |index|
    do something
  end

Will only be executed when the test is loaded, not when the test is run. This is a common error and leads to tests that 
work the first time and fail the second time.
Selenese, .sel

Selenese is the dumbest format (in a good way). You just write your commands delimited by | characters.

 |open|/selenium/setup|
 |open|/|
 |goBack|

If you don‘t want to write Selenese tests by hand you can use SeleniumIDE which has support for Selenese.

SeleniumIDE makes it super easy to record test and edit them.
HTML/RHTML

You can write your tests in HTML/RHTML but that‘s mostly useful if you have existing tests you want to reuse.
Partial test cases

If you have some common actions you want to do in several test cases you can put them in a separate partial test case 
and include them in your other test cases. This is highly recommended, just as small functions would be recommended in 
structured programming.

A partial test case is just like a normal test case besides that its filename has to start with _:

 #_login.rsel
 open '/login'
 type 'name', name
 type 'password', password
 click 'submit', :wait=>true

To include a partial test case in a RSelenese test case:

 include_partial 'login', :name => 'Jane Doe', :password => 'Jane Doe'.reverse

in a Selenese test case:

 |includePartial|login|name=John Doe|password=eoD nhoJ|

and in a RHTML test case:

 <%= render :partial => 'login', :locals => {:name = 'Joe Schmo', :password => 'Joe Schmo'.reverse} %>

Configuration

There are a number of settings available. You make them by renaming selenium.yml.example to selenium.yml and placing it 
in your rails app's config 
file.  Make your changes in that file.
Environments

Per default this plugin is only available in test environment. You can change this by setting environments, such as:

 #config.yml
 environments:
   - test
   - development

Selenium Core path

If you don‘t want to use the bundled Selenium Core version you can set selenium_path to the directory where Selenium Co
re is stored.

 #config.yml
 selenium_path: 'c:\selenium'

test:acceptance

You can run all your Selenium tests as a Rake task. If you're using a continuous builder this is a great way to 
integrate selenium into your build process.

First, if you‘re on Windows, you have to make sure win32-open3 is installed. Then you have to configure which browsers yo
u want to run, like this:

 #config.yml
 browsers:
   firefox: 'c:\Program Files\Mozilla Firefox\firefox.exe'
   ie: 'c:\Program Files\Internet Explorer\iexplore.exe'

Now you‘re all set. First start a server:

 script/server -e test

Then run the tests:

  rake test:acceptance

Now it should work, otherwise let me know!
Store results

If you want to store the results from a test:acceptance you just need to set in which directory they should be stored:

 #config.yml
 result_dir: 'c:\result'

So when you run rake test:acceptance the tables with the results will be stored as .html files in that directory.

This can be useful especially for continous integration.


= Selenium on Rails

== Overview

Selenium on Rails provides an easy way to test Rails application with 
SeleniumCore[http://www.openqa.org/selenium-core/].

This plugin does four things:
1. The Selenium Core files don't have to pollute <tt>/public</tt>.
2. No need to create suite files, they are generated on the fly -- one suite per directory in <tt>/test/selenium</tt> 
(suites can be nested).
3. Instead of writing the test cases in HTML you can use a number of better formats (see <tt>Formats</tt>).
4. Loading of fixtures and wiping of session (<tt>/selenium/setup</tt>).

== Installation

== Installation for Rails 2.1

1. Install Selenium on Rails: script/plugin install 
http://svn.openqa.org/svn/selenium-on-rails/current/selenium-on-rails
2. If you‘re on Windows, gem install win32-open3
3. If the RedCloth gem is available the Selenese test cases can use it for better markup.
4. Run the Rakefile in the plugin‘s directory to run the tests in order to see that everything works. (If RedCloth is
n‘t installed a few tests will fail since they assume RedCloth is installed.)
5. Create a test case: script/generate selenium login
6. Start the server: script/server -e test
7. Point your browser to localhost:3000/selenium
8. If everything works as expected you should see the Selenium test runner. The north east frame contains all your test 
cases (just one for now), and the north frame contains your test case.

== Installation for rails versions before Rails 2.1

Rails has been changed in ways that break the original versions of Selenium on Rails. If you're using versions before 
Rails 2.1 you need to use this release. There are no plans to update this release with new changes or bug fixes unless 
there is sufficient demand, so if you can update then do so.

1. Install Selenium on Rails: script/plugin install 
http://svn.openqa.org/svn/selenium-on-rails/tags/pre-rails-2-1/selenium-on-rails
2. If you‘re on Windows, gem install win32-open3
3. If the RedCloth gem is available the Selenese test cases can use it for better markup.
4. Run the Rakefile in the plugin‘s directory to run the tests in order to see that everything works. (If RedCloth is
n‘t installed a few tests will fail since they assume RedCloth is installed.)
5. Create a test case: script/generate selenium login
6. Start the server: script/server -e test
7. Point your browser to localhost:3000/selenium
8. If everything works as expected you should see the Selenium test runner. The north east frame contains all your test 
cases (just one for now), and the north frame contains your test case.


== Formats

The test cases can be written in a number of formats. Which one you choose is a 
matter of taste. You can generate your test files by running 
<tt>script/generate selenium</tt> or by creating them manually in your 
<tt>/test/selenium</tt> directory.

=== Selenese, .sel

Selenese is the dumbest format (in a good way). You just write your commands
delimited by | characters.

 |open|/selenium/setup|
 |open|/|
 |goBack|

If you don't want to write Selenese tests by hand you can use
SeleniumIDE[http://www.openqa.org/selenium-ide/] which has 
support[http://wiki.openqa.org/display/SIDE/SeleniumOnRails] for Selenese.

SeleniumIDE makes it super easy to record test and edit them.

=== RSelenese, .rsel

RSelenese enable you to write your tests in Ruby.

 setup :fixtures => :all
 open '/'
 assert_title 'Home'
 ('a'..'z').each {|c| open :controller => 'user', :action => 'create', :name => c }

See SeleniumOnRails::TestBuilder for available commands.

=== HTML/RHTML

You can write your tests in HTML/RHTML but that's mostly useful if you have 
existing tests you want to reuse.

=== Partial test cases

If you have some common actions you want to do in several test cases you can put
them in a separate partial test case and include them in your other test cases.

A partial test case is just like a normal test case besides that its filename
has to start with _:

 #_login.rsel
 open '/login'
 type 'name', name
 type 'password', password
 click 'submit', :wait=>true

To include a partial test case you write like this in a Selenese test case:

 |includePartial|login|name=John Doe|password=eoD nhoJ|

in a RSelenese test case:
 
 include_partial 'login', :name => 'Jane Doe', :password => 'Jane Doe'.reverse

and in a RHTML test case:

 <%= render :partial => 'login', :locals => {:name = 'Joe Schmo', :password => 'Joe Schmo'.reverse} %>

== Configuration

There are a number of settings available. You make them by copying <tt>config.yml.example</tt> to 
<tt>config/selenium.yml</tt> in your application and make your changes in that file.

=== Environments

Per default this plugin is only available in test environment. You can change 
this by setting <tt>environments</tt>, such as:

 #config.yml
 environments:
   - test
   - development

=== Selenium Core path

If you don't want to use the bundled Selenium Core version you can set 
<tt>selenium_path</tt> to the directory where Selenium Core is stored.

 #config.yml
 selenium_path: 'c:\selenium'

== <tt>test:acceptance</tt>

You can run all your Selenium tests as a Rake task.

First, if you're on Windows, you have to make sure win32-open3 is installed. 
Then you have to configure which browsers you want to run, like this:
 
 #config.yml
 browsers:
   firefox: 'c:\Program Files\Mozilla Firefox\firefox.exe'
   ie: 'c:\Program Files\Internet Explorer\iexplore.exe'

Now you're all set. First start a server:

 script/server -e test

Then run the tests:

 rake test:acceptance

Now it should work, otherwise let me know!

=== Store results

If you want to store the results from a <tt>test:acceptance</tt> you just need
to set in which directory they should be stored:

 #config.yml
 result_dir: 'c:\result'

So when you run <tt>rake test:acceptance</tt> the tables with the results will
be stored as <tt>.html</tt> files in that directory.

This can be useful especially for continous integration.

=== user_extension.js

Selenium has support for <tt>user_extension.js</tt> which is a way to extend the 
functionality of Selenium Core. Selenium on Rails now provides the means for you
to extend it's functionality to match.

To get you started, we've included the example files 
<tt>lib/test_builder_user_accessors.rb.example</tt> and 
<tt>lib/test_builder_user_actions.rb.example</tt> that replicate the sample
extensions in Selenium Core's <tt>user-extensions.js.sample</tt>

To get these examples running, simply remove the .example and .sample extensions 
from the files and restart your server.

=== Testing file uploads with Firefox

File upload testing is supported by Mozilla browsers. You need to add the 
following lines to your <tt>user.js</tt> file on your browser profile directory:

    user_pref("capability.principal.codebase.p0.granted", "UniversalFileRead");
  user_pref("capability.principal.codebase.p0.id", "http://localhost:3001");
  user_pref("capability.principal.codebase.p0.subjectName", "");
  user_pref("signed.applets.codebase_principal_support", true);

More about this at <tt>https://developer.mozilla.org/En/A_Brief_Guide_to_Mozilla_Preferences</tt>
and <tt>http://www.gemal.dk/mozilla/profile.html</tt>.

You test should have something like

  type "id=file", File.expand_path(File.dirname(__FILE__) + "/../fixtures/attachments/file.jpg")

Start the server using the command <tt>script/server -p 3001 -e test</tt> and 
go to <tt>http://localhost:3001/selenium</tt> to run your tests.

== Todo

=== Standalone mode

More work is needed on <tt>test:acceptance</tt> on Windows to be able to start 
the server when needed.

=== More setup/teardown support?

Currently there is only support to load fixtures and to wipe the session in
<tt>/selenium/setup</tt>. Is there a need for more kinds of setups or teardowns?

=== More documentation


== Not todo

=== Editor

Creating an editor for the test cases is currently considered out of scope for 
this plugin. SeleniumIDE[http://www.openqa.org/selenium-ide/] does such a good 
job and has support[http://wiki.openqa.org/display/SIDE/SeleniumOnRails] for 
the Selenese format.

== Credits

* Jon Tirsen, http://jutopia.tirsen.com -- initial 
inspiration[http://wiki.rubyonrails.com/rails/pages/SeleniumIntegration]
* Eric Kidd, http://www.randomhacks.net -- contribution of RSelenese
* Jonas Bengston -- original creator
* Marcos Tapajós http://www.improveit.com.br/en/company/tapajos -- Several useful features
* Ryan Bates, http://railscasts.com -- Fixes for Rails 2.1
* Nando Vieira, http://simplesideias.com.br

== Information

For more information, check out the website[http://www.openqa.org/selenium-on-rails/].