lib/webrat/selenium.rb in webrat-0.3.4 vs lib/webrat/selenium.rb in webrat-0.4.0
- old
+ new
@@ -1,3 +1,94 @@
-require "selenium"
+require "webrat"
+gem "selenium-client", ">=1.2.9"
+require "selenium/client"
require "webrat/selenium/selenium_session"
+require "webrat/selenium/matchers"
+module Webrat
+
+ def self.with_selenium_server #:nodoc:
+ start_selenium_server
+ yield
+ stop_selenium_server
+ end
+
+ def self.start_selenium_server #:nodoc:
+ unless Webrat.configuration.selenium_server_address
+ remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5)
+ remote_control.jar_file = File.expand_path(__FILE__ + "../../../../vendor/selenium-server.jar")
+ remote_control.start :background => true
+ end
+ TCPSocket.wait_for_service :host => (Webrat.configuration.selenium_server_address || "0.0.0.0"), :port => Webrat.configuration.selenium_server_port
+ end
+
+ def self.stop_selenium_server #:nodoc:
+ ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5).stop unless Webrat.configuration.selenium_server_address
+ end
+
+ def self.start_app_server #:nodoc:
+ pid_file = File.expand_path(RAILS_ROOT + "/tmp/pids/mongrel_selenium.pid")
+ system("mongrel_rails start -d --chdir=#{RAILS_ROOT} --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &")
+ TCPSocket.wait_for_service :host => Webrat.configuration.application_address, :port => Webrat.configuration.application_port.to_i
+ end
+
+ def self.stop_app_server #:nodoc:
+ pid_file = File.expand_path(RAILS_ROOT + "/tmp/pids/mongrel_selenium.pid")
+ system "mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}"
+ end
+
+ # To use Webrat's Selenium support, you'll need the selenium-client gem installed.
+ # Activate it with (for example, in your <tt>env.rb</tt>):
+ #
+ # require "webrat"
+ #
+ # Webrat.configure do |config|
+ # config.mode = :selenium
+ # end
+ #
+ # == Dropping down to the selenium-client API
+ #
+ # If you ever need to do something with Selenium not provided in the Webrat API,
+ # you can always drop down to the selenium-client API using the <tt>selenium</tt> method.
+ # For example:
+ #
+ # When "I drag the photo to the left" do
+ # selenium.dragdrop("id=photo_123", "+350, 0")
+ # end
+ #
+ # == Auto-starting of the mongrel and java server
+ #
+ # Webrat will automatically start the Selenium Java server process and an instance
+ # of Mongrel when a test is run. The Mongrel will run in the "selenium" environment
+ # instead of "test", so ensure you've got that defined, and will run on port 3001.
+ #
+ # == Waiting
+ #
+ # In order to make writing Selenium tests as easy as possible, Webrat will automatically
+ # wait for the correct elements to exist on the page when trying to manipulate them
+ # with methods like <tt>fill_in</tt>, etc. In general, this means you should be able to write
+ # your Webrat::Selenium tests ignoring the concurrency issues that can plague in-browser
+ # testing, so long as you're using the Webrat API.
+ module Selenium
+ module Methods
+ def response
+ webrat_session.response
+ end
+
+ def wait_for(*args, &block)
+ webrat_session.wait_for(*args, &block)
+ end
+
+ def save_and_open_screengrab
+ webrat_session.save_and_open_screengrab
+ end
+ end
+ end
+end
+
+module ActionController #:nodoc:
+ IntegrationTest.class_eval do
+ include Webrat::Methods
+ include Webrat::Selenium::Methods
+ include Webrat::Selenium::Matchers
+ end
+end