mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-17 15:50:13 +01:00
Upgrade Selenium on Rails to r140
This commit is contained in:
parent
156862200b
commit
40074c71ad
117 changed files with 16789 additions and 8867 deletions
|
|
@ -68,280 +68,229 @@
|
|||
|
||||
<div id="contextContent">
|
||||
|
||||
<div id="description">
|
||||
<h1>Selenium on Rails</h1>
|
||||
<h2>Overview</h2>
|
||||
<p>
|
||||
Selenium on Rails provides an easy way to test Rails application with <a
|
||||
href="http://www.openqa.org/selenium-core/">SeleniumCore</a>.
|
||||
</p>
|
||||
<p>
|
||||
This plugin does four things:
|
||||
</p>
|
||||
<ol>
|
||||
<li>The Selenium Core files don‘t have to pollute <tt>/public</tt>.
|
||||
<div id="description">
|
||||
<p>Welcome to the Selenium on Rails README. Exciting isn’t it?</p>
|
||||
|
||||
</li>
|
||||
<li>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).
|
||||
<h1 id="selenium_on_rails">Selenium on Rails</h1>
|
||||
|
||||
</li>
|
||||
<li>Instead of writing the test cases in HTML you can use a number of better
|
||||
formats (see <tt>Formats</tt>).
|
||||
<h2 id="overview">Overview</h2>
|
||||
|
||||
</li>
|
||||
<li>Loading of fixtures and wiping of session (<tt>/selenium/setup</tt>).
|
||||
<p>Selenium on Rails provides an easy way to test Rails application with
|
||||
SeleniumCore[http://www.openqa.org/selenium-core/].</p>
|
||||
|
||||
</li>
|
||||
</ol>
|
||||
<h2>Installation</h2>
|
||||
<ol>
|
||||
<li>Install Selenium on Rails: <tt>script/plugin install <a
|
||||
href="http://svn.openqa.org/svn/selenium-on-rails/selenium-on-rails">svn.openqa.org/svn/selenium-on-rails/selenium-on-rails</a></tt>
|
||||
<p>This plugin does four things:</p>
|
||||
|
||||
</li>
|
||||
<li>If you‘re on Windows, <tt>gem install win32-open3</tt>
|
||||
<ol>
|
||||
<li>The Selenium Core files don’t have to pollute <tt>/public</tt>.</li>
|
||||
<li>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).</li>
|
||||
<li>Instead of writing the test cases in HTML you can use a number of better formats (see <tt>Formats</tt>).</li>
|
||||
<li>Loading of fixtures and wiping of session (<tt>/selenium/setup</tt>).</li>
|
||||
</ol>
|
||||
|
||||
</li>
|
||||
<li><em>If the RedCloth gem is available the Selenese test cases can use it for
|
||||
better markup.</em>
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
||||
</li>
|
||||
<li>Run the Rakefile in the plugin‘s directory to run the tests in order
|
||||
to see that everything works. (If RedCloth isn‘t installed a few
|
||||
tests will fail since they assume RedCloth is installed.)
|
||||
<p>Rails periodically changes the way that it renders pages, which unfortunately breaks backwards versions of Selenium on Rails. Therefore there are different
|
||||
installation locations depending on your version of Rails:</p>
|
||||
|
||||
</li>
|
||||
<li>Create a test case: <tt>script/generate selenium login</tt>
|
||||
<p><em>Rails 2.2 and up:</em></p>
|
||||
|
||||
</li>
|
||||
<li>Start the server: <tt>script/server -e test</tt>
|
||||
<pre><code>http://svn.openqa.org/svn/selenium-on-rails/stable/selenium-on-rails
|
||||
</code></pre>
|
||||
|
||||
</li>
|
||||
<li>Point your browser to <tt><a
|
||||
href="http://localhost:3000/selenium">localhost:3000/selenium</a></tt>
|
||||
<p><em>Rails 2.1:</em></p>
|
||||
|
||||
</li>
|
||||
<li>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.
|
||||
<pre><code>http://svn.openqa.org/svn/selenium-on-rails/tags/rails_2_1/selenium-on-rails
|
||||
</code></pre>
|
||||
|
||||
</li>
|
||||
</ol>
|
||||
<h2>Formats</h2>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<h3>Selenese, .sel</h3>
|
||||
<p>
|
||||
Selenese is the dumbest format (in a good way). You just write your
|
||||
commands delimited by | characters.
|
||||
</p>
|
||||
<pre>
|
||||
|open|/selenium/setup|
|
||||
|open|/|
|
||||
|goBack|
|
||||
</pre>
|
||||
<p>
|
||||
If you don‘t want to write Selenese tests by hand you can use <a
|
||||
href="http://www.openqa.org/selenium-ide/">SeleniumIDE</a> which has <a
|
||||
href="http://wiki.openqa.org/display/SIDE/SeleniumOnRails">support</a> for
|
||||
Selenese.
|
||||
</p>
|
||||
<p>
|
||||
SeleniumIDE makes it super easy to record test and edit them.
|
||||
</p>
|
||||
<h3>RSelenese, .rsel</h3>
|
||||
<p>
|
||||
RSelenese enable you to write your tests in Ruby.
|
||||
</p>
|
||||
<pre>
|
||||
setup :fixtures => :all
|
||||
open '/'
|
||||
assert_title 'Home'
|
||||
('a'..'z').each {|c| open :controller => 'user', :action => 'create', :name => c }
|
||||
</pre>
|
||||
<p>
|
||||
See <a
|
||||
href="../classes/SeleniumOnRails/TestBuilder.html">SeleniumOnRails::TestBuilder</a>
|
||||
for available commands.
|
||||
</p>
|
||||
<h3>HTML/RHTML</h3>
|
||||
<p>
|
||||
You can write your tests in HTML/RHTML but that‘s mostly useful if
|
||||
you have existing tests you want to reuse.
|
||||
</p>
|
||||
<h3>Partial test cases</h3>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<p>
|
||||
A partial test case is just like a normal test case besides that its
|
||||
filename has to start with _:
|
||||
</p>
|
||||
<pre>
|
||||
#_login.rsel
|
||||
open '/login'
|
||||
type 'name', name
|
||||
type 'password', password
|
||||
click 'submit', :wait=>true
|
||||
</pre>
|
||||
<p>
|
||||
To include a partial test case you write like this in a Selenese test case:
|
||||
</p>
|
||||
<pre>
|
||||
|includePartial|login|name=John Doe|password=eoD nhoJ|
|
||||
</pre>
|
||||
<p>
|
||||
in a RSelenese test case:
|
||||
</p>
|
||||
<pre>
|
||||
include_partial 'login', :name => 'Jane Doe', :password => 'Jane Doe'.reverse
|
||||
</pre>
|
||||
<p>
|
||||
and in a RHTML test case:
|
||||
</p>
|
||||
<pre>
|
||||
<%= render :partial => 'login', :locals => {:name = 'Joe Schmo', :password => 'Joe Schmo'.reverse} %>
|
||||
</pre>
|
||||
<h2>Configuration</h2>
|
||||
<p>
|
||||
There are a number of settings available. You make them by renaming
|
||||
<tt>config.yml.example</tt> to <tt>config.yml</tt> and make your changes in
|
||||
that file.
|
||||
</p>
|
||||
<h3>Environments</h3>
|
||||
<p>
|
||||
Per default this plugin is only available in test environment. You can
|
||||
change this by setting <tt>environments</tt>, such as:
|
||||
</p>
|
||||
<pre>
|
||||
#config.yml
|
||||
environments:
|
||||
- test
|
||||
- development
|
||||
</pre>
|
||||
<h3>Selenium Core path</h3>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<pre>
|
||||
#config.yml
|
||||
selenium_path: 'c:\selenium'
|
||||
</pre>
|
||||
<h2><tt>test:acceptance</tt></h2>
|
||||
<p>
|
||||
You can run all your Selenium tests as a Rake task.
|
||||
</p>
|
||||
<p>
|
||||
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:
|
||||
</p>
|
||||
<pre>
|
||||
#config.yml
|
||||
browsers:
|
||||
firefox: 'c:\Program Files\Mozilla Firefox\firefox.exe'
|
||||
ie: 'c:\Program Files\Internet Explorer\iexplore.exe'
|
||||
</pre>
|
||||
<p>
|
||||
Now you‘re all set. First start a server:
|
||||
</p>
|
||||
<pre>
|
||||
script/server -e test
|
||||
</pre>
|
||||
<p>
|
||||
Then run the tests:
|
||||
</p>
|
||||
<pre>
|
||||
rake test:acceptance
|
||||
</pre>
|
||||
<p>
|
||||
Now it should work, otherwise let me know!
|
||||
</p>
|
||||
<h3>Store results</h3>
|
||||
<p>
|
||||
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:
|
||||
</p>
|
||||
<pre>
|
||||
#config.yml
|
||||
result_dir: 'c:\result'
|
||||
</pre>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<p>
|
||||
This can be useful especially for continous integration.
|
||||
</p>
|
||||
<h3>user_extension.js</h3>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<p>
|
||||
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>
|
||||
</p>
|
||||
<p>
|
||||
To get these examples running, simply remove the .example and .sample
|
||||
extensions from the files and restart your server.
|
||||
</p>
|
||||
<h2>Todo</h2>
|
||||
<h3>Standalone mode</h3>
|
||||
<p>
|
||||
More work is needed on <tt>test:acceptance</tt> on Windows to be able to
|
||||
start the server when needed.
|
||||
</p>
|
||||
<h3>More setup/teardown support?</h3>
|
||||
<p>
|
||||
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?
|
||||
</p>
|
||||
<h3>More documentation</h3>
|
||||
<h2>Not todo</h2>
|
||||
<h3>Editor</h3>
|
||||
<p>
|
||||
Creating an editor for the test cases is currently considered out of scope
|
||||
for this plugin. <a
|
||||
href="http://www.openqa.org/selenium-ide/">SeleniumIDE</a> does such a good
|
||||
job and has <a
|
||||
href="http://wiki.openqa.org/display/SIDE/SeleniumOnRails">support</a> for
|
||||
the Selenese format.
|
||||
</p>
|
||||
<h2>Credits</h2>
|
||||
<ul>
|
||||
<li>Jon Tirsen, <a href="http://jutopia.tirsen.com">jutopia.tirsen.com</a>
|
||||
— initial <a
|
||||
href="http://wiki.rubyonrails.com/rails/pages/SeleniumIntegration">inspiration</a>
|
||||
<p><em>Before Rails 2.1:</em></p>
|
||||
|
||||
</li>
|
||||
<li>Eric Kidd, <a href="http://www.randomhacks.net">www.randomhacks.net</a>
|
||||
— contribution of RSelenese
|
||||
<pre><code>http://svn.openqa.org/svn/selenium-on-rails/tags/pre-rails-2-1/selenium-on-rails
|
||||
</code></pre>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Information</h2>
|
||||
<p>
|
||||
For more information, check out the <a
|
||||
href="http://www.openqa.org/selenium-on-rails/">website</a>.
|
||||
</p>
|
||||
<p>The latest release is always kept on GitHub at </p>
|
||||
|
||||
</div>
|
||||
<pre><code>git clone git://github.com/paytonrules/selenium-on-rails.git
|
||||
</code></pre>
|
||||
|
||||
<p>To install:</p>
|
||||
|
||||
<ol>
|
||||
<li>Install Selenium on Rails: script/plugin install <URL></li>
|
||||
<li>If you‘re on Windows, gem install win32-open3</li>
|
||||
<li>If the RedCloth gem is available the Selenese test cases can use it for better markup.</li>
|
||||
<li>Run the Rakefile in the plugin‘s directory to run the tests in order to see that everything works. (If RedCloth isn‘t installed a few tests will fail since they assume RedCloth is installed.)</li>
|
||||
<li>Create a test case: script/generate selenium <TestName></li>
|
||||
<li>Start the server: script/server -e test</li>
|
||||
<li>Point your browser to localhost:3000/selenium</li>
|
||||
<li>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.</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="formats">Formats</h2>
|
||||
|
||||
<p>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.</p>
|
||||
|
||||
<h2 id="rselenese_rsel">RSelenese, .rsel</h2>
|
||||
|
||||
<p>RSelenese lets you write your tests in Ruby. This is my favorite format.</p>
|
||||
|
||||
<pre><code>setup :fixtures => :all
|
||||
open '/'
|
||||
assert_title 'Home'
|
||||
('a'..'z').each {|c| open :controller => 'user', :action => 'create', :name => c }
|
||||
</code></pre>
|
||||
|
||||
<p>See SeleniumOnRails::TestBuilder for available commands. <em>IMPORTANT NOTE:</em> RSelenese generates the HTML tables for Selenium behind the scenes when the page is loaded - ONCE. That means code like this:</p>
|
||||
|
||||
<pre><code>(1..10).each do |index|
|
||||
do something
|
||||
end
|
||||
</code></pre>
|
||||
|
||||
<p>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.</p>
|
||||
|
||||
<h2 id="selenese_sel">Selenese, .sel</h2>
|
||||
|
||||
<p>Selenese is the dumbest format (in a good way). You just write your commands delimited by | characters.</p>
|
||||
|
||||
<pre><code>|open|/selenium/setup|
|
||||
|open|/|
|
||||
|goBack|
|
||||
</code></pre>
|
||||
|
||||
<p>If you don‘t want to write Selenese tests by hand you can use SeleniumIDE which has support for Selenese.</p>
|
||||
|
||||
<h2 id="html_rhtml">HTML/RHTML</h2>
|
||||
|
||||
<p>You can write your tests in HTML/RHTML but that‘s mostly useful if you have existing tests you want to reuse.</p>
|
||||
|
||||
<h2 id="partial_test_cases">Partial test cases</h2>
|
||||
|
||||
<p>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.</p>
|
||||
|
||||
<p>A partial test case is just like a normal test case besides that its filename has to start with _:</p>
|
||||
|
||||
<pre><code>#_login.rsel
|
||||
open '/login'
|
||||
type 'name', name
|
||||
type 'password', password
|
||||
click 'submit', :wait=>true
|
||||
</code></pre>
|
||||
|
||||
<p>To include a partial test case in a RSelenese test case:</p>
|
||||
|
||||
<pre><code>include_partial 'login', :name => 'Jane Doe', :password => 'Jane Doe'.reverse
|
||||
</code></pre>
|
||||
|
||||
<p>in a Selenese test case:</p>
|
||||
|
||||
<pre><code>|includePartial|login|name=John Doe|password=eoD nhoJ|
|
||||
</code></pre>
|
||||
|
||||
<p>and in a RHTML test case:</p>
|
||||
|
||||
<pre><code><%= render :partial => 'login', :locals => {:name = 'Joe Schmo', :password => 'Joe Schmo'.reverse} %>
|
||||
</code></pre>
|
||||
|
||||
<h2 id="configuration">Configuration</h2>
|
||||
|
||||
<p>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.</p>
|
||||
|
||||
<h2 id="environments">Environments</h2>
|
||||
|
||||
<p>Per default this plugin is only available in test environment. You can change this by setting environments, such as:</p>
|
||||
|
||||
<pre><code>#selenium.yml
|
||||
environments:
|
||||
- test
|
||||
- development
|
||||
</code></pre>
|
||||
|
||||
<h2 id="selenium_core_path">Selenium Core path</h2>
|
||||
|
||||
<p>If you don‘t want to use the bundled Selenium Core version you can set selenium_path to the directory where Selenium Core is stored.</p>
|
||||
|
||||
<pre><code>#config.yml
|
||||
selenium_path: 'c:\selenium'
|
||||
</code></pre>
|
||||
|
||||
<h2 id="rake_task">Rake Task</h2>
|
||||
|
||||
<p>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 you want to run, like this:</p>
|
||||
|
||||
<pre><code>#config.yml
|
||||
browsers:
|
||||
firefox: 'c:\Program Files\Mozilla Firefox\firefox.exe'
|
||||
ie: 'c:\Program Files\Internet Explorer\iexplore.exe'
|
||||
</code></pre>
|
||||
|
||||
<p>Now you‘re all set. First start a server:</p>
|
||||
|
||||
<pre><code>script/server -e test
|
||||
</code></pre>
|
||||
|
||||
<p>Then run the tests:</p>
|
||||
|
||||
<pre><code>rake test:acceptance
|
||||
</code></pre>
|
||||
|
||||
<p>Now it should work, otherwise let me know!</p>
|
||||
|
||||
<h2 id="store_results">Store results</h2>
|
||||
|
||||
<p>If you want to store the results from a test:acceptance you just need to set in which directory they should be stored:</p>
|
||||
|
||||
<pre><code>#config.yml
|
||||
result_dir: 'c:\result'
|
||||
</code></pre>
|
||||
|
||||
<p>So when you run rake test:acceptance the tables with the results will be stored as .html files in that directory.</p>
|
||||
|
||||
<h2 id="user_extensionjs">user_extension.js</h2>
|
||||
|
||||
<p>Selenium has support for user_extension.js 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.</p>
|
||||
|
||||
<p>To get you started, we’ve included the example files lib/test_builder_user_accessors.rb.example and lib/test_builder_user_actions.rb.example that replicate the sample extensions in Selenium Core’s user-extensions.js.sample.</p>
|
||||
|
||||
<p>To get these examples running, simply remove the .example and .sample extensions
|
||||
from the files and restart your server.</p>
|
||||
|
||||
<h2 id="todo">Todo</h2>
|
||||
|
||||
<ul>
|
||||
<li><p>Standalone mode
|
||||
More work is needed on test:acceptance< on Windows to be able to start the server when needed.</p></li>
|
||||
<li><p>Documentation update</p></li>
|
||||
</ul>
|
||||
|
||||
<h2 id="not_todo">Not todo</h2>
|
||||
|
||||
<ul>
|
||||
<li>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 both the Selenese and RSelenese formats.</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="credits">Credits</h2>
|
||||
|
||||
<ul>
|
||||
<li>Jonas Bengston — original creator</li>
|
||||
<li>Eric Smith, http://blog.8thlight.com/eric — Current Maintainer</li>
|
||||
<li>Jon Tirsen, http://jutopia.tirsen.com — initial inspiration[http://wiki.rubyonrails.com/rails/pages/SeleniumIntegration]</li>
|
||||
<li>Eric Kidd, http://www.randomhacks.net — contribution of RSelenese</li>
|
||||
<li>Marcos Tapajós http://www.improveit.com.br/en/company/tapajos — Several useful features, current committer</li>
|
||||
<li>Ryan Bates, http://railscasts.com — Fixes for Rails 2.1</li>
|
||||
<li>Nando Vieira, http://simplesideias.com.br</li>
|
||||
<li>Gordon McCreight, a neat script that lists any unsupported methods</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="contributing_">Contributing ##</h2>
|
||||
|
||||
<p>Contributing is simple. Fork this repo, make your changes, then issue a pull request. <em>IMPORTANT</em> I will not take forks that do not have associated unit tests. There must be tests, and they must pass, so I can bring the changes in.</p>
|
||||
|
||||
<h2 id="information">Information</h2>
|
||||
|
||||
<p>For more information, check out the <a href="http://seleniumhq.org/projects/on-rails/">website</a>.</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue