diff --git a/lib/webrat/core/configuration.rb b/lib/webrat/core/configuration.rb index bde214c..2cd58c0 100755 --- a/lib/webrat/core/configuration.rb +++ b/lib/webrat/core/configuration.rb @@ -53,7 +53,7 @@ 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 diff --git a/lib/webrat/selenium/application_server.rb b/lib/webrat/selenium/application_server.rb index 4f47332..8050b72 100644 --- a/lib/webrat/selenium/application_server.rb +++ b/lib/webrat/selenium/application_server.rb @@ -2,7 +2,7 @@ module Webrat module Selenium class ApplicationServer - + include Webrat::Selenium::SilenceStream def self.boot diff --git a/lib/webrat/selenium/selenium_rc_server.rb b/lib/webrat/selenium/selenium_rc_server.rb index 4148b53..101e7e9 100644 --- a/lib/webrat/selenium/selenium_rc_server.rb +++ b/lib/webrat/selenium/selenium_rc_server.rb @@ -2,7 +2,7 @@ module Webrat module Selenium class SeleniumRCServer - + include Webrat::Selenium::SilenceStream def self.boot @@ -32,8 +32,8 @@ 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, + @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 diff --git a/lib/webrat/selenium/selenium_session.rb b/lib/webrat/selenium/selenium_session.rb index 22905b9..56de115 100644 --- a/lib/webrat/selenium/selenium_session.rb +++ b/lib/webrat/selenium/selenium_session.rb @@ -5,61 +5,61 @@ require "webrat/selenium/application_server" module Webrat class TimeoutError < WebratError end - + class SeleniumResponse attr_reader :body attr_reader :session - + def initialize(session, body) @session = session @body = body end - + def selenium session.selenium end end - + class SeleniumSession include Webrat::SaveAndOpenPage include Webrat::Selenium::SilenceStream - + def initialize(*args) # :nodoc: end - + def simulate end - + def automate yield end - + def visit(url) selenium.open(url) end - + webrat_deprecate :visits, :visit - + def fill_in(field_identifier, options) locator = "webrat=#{field_identifier}" selenium.wait_for_element locator, :timeout_in_seconds => 5 selenium.type(locator, "#{options[:with]}") end - + webrat_deprecate :fills_in, :fill_in - + def response SeleniumResponse.new(self, response_body) end - + def response_body #:nodoc: 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 @@ -68,159 +68,159 @@ module Webrat end pattern ||= '*' locator = "button=#{pattern}" - + selenium.wait_for_element locator, :timeout_in_seconds => 5 selenium.click locator end - + webrat_deprecate :clicks_button, :click_button - + def click_link(link_text_or_regexp, options = {}) pattern = adjust_if_regexp(link_text_or_regexp) locator = "webratlink=#{pattern}" selenium.wait_for_element locator, :timeout_in_seconds => 5 selenium.click locator end - + webrat_deprecate :clicks_link, :click_link - + def click_link_within(selector, link_text, options = {}) locator = "webratlinkwithin=#{selector}|#{link_text}" selenium.wait_for_element locator, :timeout_in_seconds => 5 selenium.click locator end - + webrat_deprecate :clicks_link_within, :click_link_within - + def select(option_text, options = {}) id_or_name_or_label = options[:from] - + if id_or_name_or_label select_locator = "webrat=#{id_or_name_or_label}" else select_locator = "webratselectwithoption=#{option_text}" end - + selenium.wait_for_element select_locator, :timeout_in_seconds => 5 selenium.select(select_locator, option_text) end - + webrat_deprecate :selects, :select - + def choose(label_text) locator = "webrat=#{label_text}" selenium.wait_for_element locator, :timeout_in_seconds => 5 selenium.click locator end - + webrat_deprecate :chooses, :choose - + def check(label_text) locator = "webrat=#{label_text}" selenium.wait_for_element locator, :timeout_in_seconds => 5 selenium.click locator end alias_method :uncheck, :check - + webrat_deprecate :checks, :check - + def fire_event(field_identifier, event) locator = "webrat=#{Regexp.escape(field_identifier)}" selenium.fire_event(locator, "#{event}") end - + def key_down(field_identifier, key_code) locator = "webrat=#{Regexp.escape(field_identifier)}" selenium.key_down(locator, key_code) end - + def key_up(field_identifier, key_code) locator = "webrat=#{Regexp.escape(field_identifier)}" selenium.key_up(locator, key_code) end - + def wait_for(params={}) timeout = params[:timeout] || 5 message = params[:message] || "Timeout exceeded" - + begin_time = Time.now - + while (Time.now - begin_time) < timeout value = nil - + begin value = yield rescue Exception => e raise e unless yieldable_exceptions.include?(e.class) end - + return value if value - + sleep 0.25 end - + raise Webrat::TimeoutError.new(message + " (after #{timeout} sec)") true end - + def selenium return $browser if $browser setup $browser end - + webrat_deprecate :browser, :selenium - - + + def save_and_open_screengrab return unless File.exist?(saved_page_dir) - + filename = "#{saved_page_dir}/webrat-#{Time.now.to_i}.png" - + if $browser.chrome_backend? $browser.capture_entire_page_screenshot(filename, '') else $browser.capture_screenshot(filename) end open_in_browser(filename) - + end - + def yieldable_exceptions return [::Selenium::CommandError, Webrat::WebratError] unless lib_defined?(::Spec::Expectations::ExpectationNotMetError) [::Spec::Expectations::ExpectationNotMetError, ::Selenium::CommandError, Webrat::WebratError] end - + protected def lib_defined?(library) defined?(library) end - + def setup #:nodoc: Webrat::Selenium::SeleniumRCServer.boot Webrat::Selenium::ApplicationServer.boot - + create_browser $browser.start - + extend_selenium define_location_strategies $browser.window_maximize end - - + + def create_browser $browser = ::Selenium::Client::Driver.new(Webrat.configuration.selenium_server_address || "localhost", Webrat.configuration.selenium_server_port, Webrat.configuration.selenium_browser_key, "http://#{Webrat.configuration.application_address}:#{Webrat.configuration.application_port}") $browser.set_speed(0) unless Webrat.configuration.selenium_server_address - + at_exit do silence_stream(STDOUT) do $browser.stop end end end - + def adjust_if_regexp(text_or_regexp) #:nodoc: if text_or_regexp.is_a?(Regexp) "evalregex:#{text_or_regexp.inspect}" @@ -228,13 +228,13 @@ module Webrat "evalregex:/#{text_or_regexp}/" end end - + def extend_selenium #:nodoc: extensions_file = File.join(File.dirname(__FILE__), "selenium_extensions.js") extenions_js = File.read(extensions_file) selenium.get_eval(extenions_js) end - + def define_location_strategies #:nodoc: Dir[File.join(File.dirname(__FILE__), "location_strategy_javascript", "*.js")].sort.each do |file| strategy_js = File.read(file) diff --git a/lib/webrat/selenium/silence_stream.rb b/lib/webrat/selenium/silence_stream.rb index f5e54d8..0c724ab 100644 --- a/lib/webrat/selenium/silence_stream.rb +++ b/lib/webrat/selenium/silence_stream.rb @@ -12,7 +12,7 @@ module Webrat ensure stream.reopen(old_stream) end - end + end end end end \ No newline at end of file diff --git a/spec/integration/rails/app/controllers/webrat_controller.rb b/spec/integration/rails/app/controllers/webrat_controller.rb index d754ca7..b117ae8 100644 --- a/spec/integration/rails/app/controllers/webrat_controller.rb +++ b/spec/integration/rails/app/controllers/webrat_controller.rb @@ -5,35 +5,35 @@ class FakeModel end class WebratController < ApplicationController - + def form end - + def submit render :text => "OK Test Link Text" end - + def internal_redirect redirect_to submit_path end - + def infinite_redirect redirect_to infinite_redirect_path end - + def external_redirect redirect_to "http://google.com" end - + def before_redirect_form end - + def redirect_to_show_params redirect_to show_params_path(:custom_param => "123") end - + def show_params render :text => params.to_json end - + end diff --git a/spec/integration/rails/test/integration/button_click_test.rb b/spec/integration/rails/test/integration/button_click_test.rb index 3cd0c6c..f983fae 100644 --- a/spec/integration/rails/test/integration/button_click_test.rb +++ b/spec/integration/rails/test/integration/button_click_test.rb @@ -42,7 +42,7 @@ class ButtonClickTest < ActionController::IntegrationTest visit buttons_path click_button "button_image_text" end - + # test "should click image with type button by id" do visit buttons_path @@ -76,5 +76,5 @@ class ButtonClickTest < ActionController::IntegrationTest visit buttons_path click_button "input_image_alt" end - + end \ No newline at end of file diff --git a/spec/integration/rails/test/integration/link_click_test.rb b/spec/integration/rails/test/integration/link_click_test.rb index ebfdefb..9cc517f 100644 --- a/spec/integration/rails/test/integration/link_click_test.rb +++ b/spec/integration/rails/test/integration/link_click_test.rb @@ -12,7 +12,7 @@ class LinkClickTest < ActionController::IntegrationTest click_link "link_by_id" assert_contain("Link:link_by_id") end - + test "should click link by title" do visit links_path click_link "LinkByTitle" diff --git a/spec/private/core/configuration_spec.rb b/spec/private/core/configuration_spec.rb index 0a9d069..ab49b7d 100755 --- a/spec/private/core/configuration_spec.rb +++ b/spec/private/core/configuration_spec.rb @@ -92,11 +92,11 @@ 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 diff --git a/spec/public/matchers/have_xpath_spec.rb b/spec/public/matchers/have_xpath_spec.rb index 28157a8..1f6b481 100644 --- a/spec/public/matchers/have_xpath_spec.rb +++ b/spec/public/matchers/have_xpath_spec.rb @@ -94,7 +94,7 @@ describe "have_xpath" do node.should have_xpath("//a[@href='http://example.org']") end end - + it "should allow descendant selectors in the block" do @body.should have_xpath("//div[@id='main']") do |node| node.should have_xpath("//ul//a") diff --git a/spec/public/selenium/selenium_session_spec.rb b/spec/public/selenium/selenium_session_spec.rb index f244815..22b8a4d 100644 --- a/spec/public/selenium/selenium_session_spec.rb +++ b/spec/public/selenium/selenium_session_spec.rb @@ -4,22 +4,22 @@ require "webrat/selenium/silence_stream" require "webrat/selenium/selenium_session" describe Webrat::SeleniumSession do - + before :each do Webrat.configuration.mode = :selenium @selenium = Webrat::SeleniumSession.new() end - + it "should provide a list yieldable exceptions without spec if spec isn't defined" do @selenium.should_receive(:lib_defined?).with(::Spec::Expectations::ExpectationNotMetError).and_return(false) @selenium.yieldable_exceptions.should == [::Selenium::CommandError, Webrat::WebratError] end - + it "should provide a list yieldable exceptions with rspec" do @selenium.should_receive(:lib_defined?).with(::Spec::Expectations::ExpectationNotMetError).and_return(true) @selenium.yieldable_exceptions.should == [::Spec::Expectations::ExpectationNotMetError, ::Selenium::CommandError, Webrat::WebratError] end - + it "should throw timeout instead of spec expectionnotmet error" do begin @selenium.wait_for(:timeout => 0.1) do @@ -29,7 +29,7 @@ describe Webrat::SeleniumSession do rescue Webrat::TimeoutError end end - + it "should throw timeout instead of selenium command error" do begin @selenium.wait_for(:timeout => 0.1) do @@ -39,7 +39,7 @@ describe Webrat::SeleniumSession do rescue Webrat::TimeoutError end end - + it "should throw timeout instead of webrat error" do begin @selenium.wait_for(:timeout => 0.1) do @@ -49,5 +49,5 @@ describe Webrat::SeleniumSession do rescue Webrat::TimeoutError end end - + end