diff --git a/History.txt b/History.txt index 2a47287..de6283f 100644 --- a/History.txt +++ b/History.txt @@ -9,6 +9,9 @@ * Added support for field_labeled_locators ending in non word characters lh 148 (Zach Dennis) * Filled in tests on click link lh 195 (diabolo) + * Added current_url to selenium session lh 215 (Luke Amdor) + * Added silence spec to selenium lh 238 (Martin Gamsjaeger aka snusnu) + * Added ability to configure the browser startup timeout for selenium lh 242 (Mike Gaffney) == 0.4.4 / 2009-04-06 diff --git a/lib/webrat/core/configuration.rb b/lib/webrat/core/configuration.rb index 33d274f..bde214c 100755 --- a/lib/webrat/core/configuration.rb +++ b/lib/webrat/core/configuration.rb @@ -53,6 +53,9 @@ module Webrat # Set the key that Selenium uses to determine the browser running. Default *firefox attr_accessor :selenium_browser_key + + # Set the timeout for waiting for the browser process to start + attr_accessor :selenium_browser_startup_timeout # How many redirects to the same URL should be halted as an infinite redirect # loop? Defaults to 10 @@ -68,6 +71,7 @@ module Webrat self.selenium_server_port = 4444 self.infinite_redirect_limit = 10 self.selenium_browser_key = '*firefox' + self.selenium_browser_startup_timeout = 5 end def parse_with_nokogiri? #:nodoc: diff --git a/lib/webrat/selenium.rb b/lib/webrat/selenium.rb index b7574fe..2564645 100644 --- a/lib/webrat/selenium.rb +++ b/lib/webrat/selenium.rb @@ -1,6 +1,13 @@ require "webrat" gem "selenium-client", ">=1.2.14" require "selenium/client" + +# active_support already defines silence_stream, no need to do that again if it's already present. +# http://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/kernel/reporting.rb +unless Kernel.respond_to?(:silence_stream) + require "webrat/selenium/silence_stream" +end + require "webrat/selenium/selenium_session" require "webrat/selenium/matchers" require "webrat/core_extensions/tcp_socket" diff --git a/lib/webrat/selenium/application_server.rb b/lib/webrat/selenium/application_server.rb index f4edc98..4f47332 100644 --- a/lib/webrat/selenium/application_server.rb +++ b/lib/webrat/selenium/application_server.rb @@ -2,6 +2,8 @@ module Webrat module Selenium class ApplicationServer + + include Webrat::Selenium::SilenceStream def self.boot case Webrat.configuration.application_framework diff --git a/lib/webrat/selenium/selenium_rc_server.rb b/lib/webrat/selenium/selenium_rc_server.rb index 0d0b651..4148b53 100644 --- a/lib/webrat/selenium/selenium_rc_server.rb +++ b/lib/webrat/selenium/selenium_rc_server.rb @@ -2,6 +2,8 @@ module Webrat module Selenium class SeleniumRCServer + + include Webrat::Selenium::SilenceStream def self.boot new.boot @@ -30,7 +32,9 @@ module Webrat def remote_control return @remote_control if @remote_control - @remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5) + @remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", + Webrat.configuration.selenium_server_port, + Webrat.configuration.selenium_browser_startup_timeout) @remote_control.jar_file = jar_path return @remote_control diff --git a/lib/webrat/selenium/selenium_session.rb b/lib/webrat/selenium/selenium_session.rb index 5149299..0130b5e 100644 --- a/lib/webrat/selenium/selenium_session.rb +++ b/lib/webrat/selenium/selenium_session.rb @@ -22,6 +22,7 @@ module Webrat class SeleniumSession include Webrat::SaveAndOpenPage + include Webrat::Selenium::SilenceStream def initialize(*args) # :nodoc: end @@ -55,6 +56,10 @@ module Webrat selenium.get_html_source end + def current_url + selenium.location + end + def click_button(button_text_or_regexp = nil, options = {}) if button_text_or_regexp.is_a?(Hash) && options == {} pattern, options = nil, button_text_or_regexp @@ -182,15 +187,6 @@ module Webrat protected - def silence_stream(stream) - old_stream = stream.dup - stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null') - stream.sync = true - yield - ensure - stream.reopen(old_stream) - end - def setup #:nodoc: Webrat::Selenium::SeleniumRCServer.boot Webrat::Selenium::ApplicationServer.boot diff --git a/lib/webrat/selenium/silence_stream.rb b/lib/webrat/selenium/silence_stream.rb new file mode 100644 index 0000000..a458306 --- /dev/null +++ b/lib/webrat/selenium/silence_stream.rb @@ -0,0 +1,14 @@ +module Webrat + module Selenium + module SilenceStream + def silence_stream(stream) + old_stream = stream.dup + stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null') + stream.sync = true + yield + ensure + stream.reopen(old_stream) + end + end + end +end \ No newline at end of file diff --git a/spec/integration/rails/test/integration/webrat_test.rb b/spec/integration/rails/test/integration/webrat_test.rb index e2c2def..b1449ca 100644 --- a/spec/integration/rails/test/integration/webrat_test.rb +++ b/spec/integration/rails/test/integration/webrat_test.rb @@ -10,6 +10,7 @@ class WebratTest < ActionController::IntegrationTest test "should visit pages" do visit root_path assert_contain("Webrat Form") + assert URI.parse(current_url).path, root_path end test "should submit forms" do diff --git a/spec/private/core/configuration_spec.rb b/spec/private/core/configuration_spec.rb index 9180216..0a9d069 100755 --- a/spec/private/core/configuration_spec.rb +++ b/spec/private/core/configuration_spec.rb @@ -92,6 +92,15 @@ describe Webrat::Configuration do it 'should default selenium browser key to *firefox' do @config.selenium_browser_key.should == '*firefox' end + + it 'should default selenium browser startup timeout to 5 seconds' do + @config.selenium_browser_startup_timeout.should == 5 + end + + it 'should allow overriding of the browser startup timeout' do + @config.selenium_browser_startup_timeout = 10 + @config.selenium_browser_startup_timeout.should == 10 + end end end