spec/implementation.rb in watir-webdriver-0.9.1 vs spec/implementation.rb in watir-webdriver-0.9.2

- old
+ new

@@ -5,19 +5,46 @@ @imp = imp end def configure set_webdriver + start_remote_server if remote? && !ENV["REMOTE_SERVER_URL"] set_browser_args set_guard_proc add_html_routes WatirSpec.always_use_server = mobile? || ie? || safari? || phantomjs? || remote? end private + def start_remote_server + require 'selenium/server' + + @server ||= Selenium::Server.new(remote_server_jar, + :port => Selenium::WebDriver::PortProber.above(4444), + :log => !!$DEBUG, + :background => true, + :timeout => 60) + + @server.start + at_exit { @server.stop } + end + + def remote_server_jar + if File.exist?(ENV['REMOTE_SERVER_BINARY'] || '') + ENV['REMOTE_SERVER_BINARY'] + elsif !Dir.glob('selenium-server-standalone*.jar').empty? + Dir.glob('selenium-server-standalone*.jar').first + else + Selenium::Server.download :latest + end + rescue SocketError + # not connected to internet + raise Watir::Exception::Error, "unable to find or download selenium-server-standalone jar" + end + def set_webdriver @imp.name = :webdriver @imp.browser_class = Watir::Browser end @@ -61,33 +88,31 @@ def remote? browser == :remote end def set_guard_proc - matching_browser = remote? ? remote_browser : browser - browser_instance = WatirSpec.new_browser - browser_version = browser_instance.driver.capabilities.version - matching_browser_with_version = "#{matching_browser}#{browser_version}".to_sym - matching_guards = [ - :webdriver, # guard only applies to webdriver - matching_browser, # guard only applies to this browser - matching_browser_with_version, # guard only applies to this browser with specific version - [:webdriver, matching_browser], # guard only applies to this browser on webdriver - [:webdriver, matching_browser_with_version], # guard only applies to this browser with specific version on webdriver - [matching_browser, Selenium::WebDriver::Platform.os] # guard only applies to this browser with this OS - ] + matching_guards = [:webdriver] - if native_events? - # guard only applies to this browser on webdriver with native events enabled - matching_guards << [:webdriver, matching_browser, :native_events] - matching_guards << [:webdriver, matching_browser_with_version, :native_events] + if remote? + matching_browser = remote_browser + matching_guards << :remote + matching_guards << [:remote, matching_browser] else - # guard only applies to this browser on webdriver with native events disabled - matching_guards << [:webdriver, matching_browser, :synthesized_events] - matching_guards << [:webdriver, matching_browser_with_version, :synthesized_events] + matching_browser = browser end + browser_instance = WatirSpec.new_browser + browser_version = browser_instance.driver.capabilities.version + + matching_browser_with_version = "#{browser}#{browser_version}".to_sym + matching_guards << matching_browser_with_version if browser_version + matching_guards << [:webdriver, matching_browser_with_version] + + matching_guards << matching_browser + matching_guards << [:webdriver, matching_browser] + matching_guards << [matching_browser, Selenium::WebDriver::Platform.os] + if !Selenium::WebDriver::Platform.linux? || ENV['DESKTOP_SESSION'] # some specs (i.e. Window#maximize) needs a window manager on linux matching_guards << [:webdriver, matching_browser, :window_manager] matching_guards << [:webdriver, matching_browser_with_version, :window_manager] end @@ -98,20 +123,16 @@ ensure browser_instance.close if browser_instance end def firefox_args - profile = Selenium::WebDriver::Firefox::Profile.new - profile.native_events = native_events? - - [:firefox, {profile: profile}] + [:firefox, {}] end def chrome_args opts = { - args: ["--disable-translate"], - native_events: native_events? + args: ["--disable-translate"] } if url = ENV['WATIR_WEBDRIVER_CHROME_SERVER'] opts[:url] = url end @@ -130,11 +151,14 @@ [:chrome, opts] end def remote_args - [:remote, {url: ENV["WATIR_WEBDRIVER_REMOTE_URL"] || "http://127.0.0.1:8080"}] + url = ENV["REMOTE_SERVER_URL"] || "http://127.0.0.1:#{@server.port}/wd/hub" + remote_browser_name = ENV['REMOTE_BROWSER'].to_sym + caps = Selenium::WebDriver::Remote::Capabilities.send(remote_browser_name) + [:remote, {url: url, desired_capabilities: caps}] end def add_html_routes glob = File.expand_path("../html/*.html", __FILE__) Dir[glob].each do |path| @@ -145,27 +169,10 @@ def browser @browser ||= (ENV['WATIR_WEBDRIVER_BROWSER'] || :firefox).to_sym end def remote_browser - remote_browser = WatirSpec.new_browser - remote_browser.browser.name - ensure - remote_browser.close - end - - def native_events? - if ENV['NATIVE_EVENTS'] == "true" - true - elsif ENV['NATIVE_EVENTS'] == "false" && !ie? - false - else - native_events_by_default? - end - end - - def native_events_by_default? - Selenium::WebDriver::Platform.windows? && [:firefox, :internet_explorer].include?(browser) + @remote_browser ||= (ENV['REMOTE_BROWSER'] || :firefox).to_sym end class SelectorListener < Selenium::WebDriver::Support::AbstractEventListener def initialize @counts = Hash.new(0)