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)