From 34d51979b2b5d62cd188ff80a220f6d0d9bd1003 Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Fri, 24 Aug 2018 11:32:55 -0700 Subject: [PATCH] remove unused methods and move selenium test browser detection to selenium specs --- lib/capybara/selenium/driver.rb | 71 ++++++++++------------------ lib/capybara/spec/spec_helper.rb | 32 ------------- spec/selenium_spec_chrome_remote.rb | 2 +- spec/selenium_spec_firefox_remote.rb | 3 +- spec/spec_helper.rb | 41 ++++++++++++++++ 5 files changed, 67 insertions(+), 82 deletions(-) diff --git a/lib/capybara/selenium/driver.rb b/lib/capybara/selenium/driver.rb index 2a7e59b3..97ee8d06 100644 --- a/lib/capybara/selenium/driver.rb +++ b/lib/capybara/selenium/driver.rb @@ -21,27 +21,13 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base end def browser - unless @browser - # if firefox? - # options[:desired_capabilities] ||= {} - # options[:desired_capabilities][:unexpectedAlertBehaviour] = "ignore" - # end - - @processed_options = options.reject { |key, _val| SPECIAL_OPTIONS.include?(key) } - @browser = Selenium::WebDriver.for(options[:browser], @processed_options) - - extend ChromeDriver if chrome? - extend MarionetteDriver if marionette? - - main = Process.pid - at_exit do - # Store the exit status of the test run since it goes away after calling the at_exit proc... - @exit_status = $ERROR_INFO.status if $ERROR_INFO.is_a?(SystemExit) - quit if Process.pid == main - exit @exit_status if @exit_status # Force exit with stored status + @browser ||= begin + processed_options = options.reject { |key, _val| SPECIAL_OPTIONS.include?(key) } + Selenium::WebDriver.for(options[:browser], processed_options).tap do |driver| + specialize_driver(driver) + setup_exit_handler end end - @browser end def initialize(app, **options) @@ -271,34 +257,6 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base private - def w3c? - browser&.capabilities.is_a?(Selenium::WebDriver::Remote::W3C::Capabilities) - end - - def marionette? - firefox? && w3c? - end - - def firefox? - browser_name == :firefox - end - - def chrome? - browser_name == :chrome - end - - def edge? - browser_name == :edge - end - - def ie? - %i[internet_explorer ie].include?(browser_name) - end - - def browser_name - browser.browser - end - def native_args(args) args.map { |arg| arg.is_a?(Capybara::Selenium::Node) ? arg.native : arg } end @@ -399,6 +357,25 @@ private def build_node(native_node) ::Capybara::Selenium::Node.new(self, native_node) end + + def specialize_driver(sel_driver) + case sel_driver.browser + when :chrome + extend ChromeDriver + when :firefox + extend MarionetteDriver if sel_driver.capabilities.is_a?(::Selenium::WebDriver::Remote::W3C::Capabilities) + end + end + + def setup_exit_handler + main = Process.pid + at_exit do + # Store the exit status of the test run since it goes away after calling the at_exit proc... + @exit_status = $ERROR_INFO.status if $ERROR_INFO.is_a?(SystemExit) + quit if Process.pid == main + exit @exit_status if @exit_status # Force exit with stored status + end + end end require 'capybara/selenium/driver_specializations/chrome_driver' diff --git a/lib/capybara/spec/spec_helper.rb b/lib/capybara/spec/spec_helper.rb index 6ea2b530..563d20f6 100644 --- a/lib/capybara/spec/spec_helper.rb +++ b/lib/capybara/spec/spec_helper.rb @@ -119,38 +119,6 @@ module Capybara expect(session).to have_xpath("//pre[@id='results']") YAML.load Nokogiri::HTML(session.body).xpath("//pre[@id='results']").first.inner_html.lstrip end - - def marionette?(session) - session.respond_to?(:driver) && session.driver.respond_to?(:marionette?, true) && session.driver.send(:marionette?) - end - - def marionette_lt?(version, session) - marionette?(session) && (session.driver.browser.capabilities[:browser_version].to_f < version) - end - - def marionette_gte?(version, session) - marionette?(session) && (session.driver.browser.capabilities[:browser_version].to_f >= version) - end - - def chrome?(session) - session.respond_to?(:driver) && session.driver.respond_to?(:chrome?, true) && session.driver.send(:chrome?) - end - - def chrome_lt?(version, session) - chrome?(session) && (session.driver.browser.capabilities[:version].to_f < version) - end - - def chrome_gte?(version, session) - chrome?(session) && (session.driver.browser.capabilities[:version].to_f >= version) - end - - def edge?(session) - session.respond_to?(:driver) && session.driver.respond_to?(:edge?, true) && session.driver.send(:edge?) - end - - def ie?(session) - session.respond_to?(:driver) && session.driver.respond_to?(:ie?, true) && session.driver.send(:ie?) - end end end diff --git a/spec/selenium_spec_chrome_remote.rb b/spec/selenium_spec_chrome_remote.rb index c339ae6e..f1c49897 100644 --- a/spec/selenium_spec_chrome_remote.rb +++ b/spec/selenium_spec_chrome_remote.rb @@ -77,6 +77,6 @@ RSpec.describe 'Capybara::Session with remote Chrome' do include_examples Capybara::RSpecMatchers, TestSessions::Chrome, CHROME_REMOTE_DRIVER it 'is considered to be chrome' do - expect(session.driver.send(:chrome?)).to be_truthy + expect(session.driver.browser.browser).to eq :chrome end end diff --git a/spec/selenium_spec_firefox_remote.rb b/spec/selenium_spec_firefox_remote.rb index 2d069a1f..f7000a20 100644 --- a/spec/selenium_spec_firefox_remote.rb +++ b/spec/selenium_spec_firefox_remote.rb @@ -78,7 +78,6 @@ RSpec.describe 'Capybara::Session with remote firefox' do include_examples Capybara::RSpecMatchers, TestSessions::RemoteFirefox, FIREFOX_REMOTE_DRIVER it 'is considered to be firefox' do - expect(session.driver.send(:firefox?)).to be_truthy - expect(session.driver.send(:marionette?)).to be_truthy + expect(session.driver.browser.browser).to eq :firefox end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 35c1bea0..959e653e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -4,6 +4,47 @@ require 'rspec/expectations' require 'capybara/spec/spec_helper' require 'webdrivers' if ENV['CI'] +module Capybara + module SpecHelper + def marionette?(session) + browser_name(session) == :firefox && + session.driver.browser.capabilities.is_a?(::Selenium::WebDriver::Remote::W3C::Capabilities) + end + + def marionette_lt?(version, session) + marionette?(session) && (session.driver.browser.capabilities[:browser_version].to_f < version) + end + + def marionette_gte?(version, session) + marionette?(session) && (session.driver.browser.capabilities[:browser_version].to_f >= version) + end + + def chrome?(session) + browser_name(session) == :chrome + end + + def chrome_lt?(version, session) + chrome?(session) && (session.driver.browser.capabilities[:version].to_f < version) + end + + def chrome_gte?(version, session) + chrome?(session) && (session.driver.browser.capabilities[:version].to_f >= version) + end + + def edge?(session) + browser_name(session) == :edge + end + + def ie?(session) + %i[internet_explorer ie].include?(browser_name(session)) + end + + def browser_name(session) + session.driver.browser.browser if session.respond_to?(:driver) + end + end +end + RSpec.configure do |config| Capybara::SpecHelper.configure(config) config.filter_run_including focus_: true unless ENV['CI']