From fad6f98cae3427bdc2b206240f79ac42659e6efd Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Mon, 2 Apr 2018 10:08:29 -0700 Subject: [PATCH] Fixes for IE driver --- lib/capybara/node/actions.rb | 5 +++-- lib/capybara/selenium/driver.rb | 10 +++++++++- lib/capybara/spec/session/refresh_spec.rb | 2 +- lib/capybara/spec/spec_helper.rb | 4 ++++ spec/selenium_spec_ie.rb | 2 +- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/capybara/node/actions.rb b/lib/capybara/node/actions.rb index 799733fe..147aca5d 100644 --- a/lib/capybara/node/actions.rb +++ b/lib/capybara/node/actions.rb @@ -264,8 +264,9 @@ module Capybara raise unless allow_label_click && catch_error?(e) begin el ||= find(selector, locator, options.merge(visible: :all)) - find(:label, for: el, visible: true).click unless el.checked? == checked - rescue # swallow extra errors - raise original + res = find(:label, for: el, visible: true).click unless el.checked? == checked + res + rescue => e2 # swallow extra errors - raise original raise e end end diff --git a/lib/capybara/selenium/driver.rb b/lib/capybara/selenium/driver.rb index 562d32af..a9c03982 100644 --- a/lib/capybara/selenium/driver.rb +++ b/lib/capybara/selenium/driver.rb @@ -268,7 +268,10 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base ::Selenium::WebDriver::Error::ElementNotInteractableError, ::Selenium::WebDriver::Error::ElementClickInterceptedError, ::Selenium::WebDriver::Error::InvalidElementStateError, - ::Selenium::WebDriver::Error::ElementNotSelectableError + ::Selenium::WebDriver::Error::ElementNotSelectableError, + ::Selenium::WebDriver::Error::ElementNotSelectableError, + ::Selenium::WebDriver::Error::NoSuchElementError, # IE + ::Selenium::WebDriver::Error::InvalidArgumentError #IE ] end @@ -296,6 +299,11 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base browser_name == "edge" end + # @api private + def ie? + browser_name == "ie" + end + private def browser_name diff --git a/lib/capybara/spec/session/refresh_spec.rb b/lib/capybara/spec/session/refresh_spec.rb index 8f2e9c3f..83da2221 100644 --- a/lib/capybara/spec/session/refresh_spec.rb +++ b/lib/capybara/spec/session/refresh_spec.rb @@ -18,7 +18,7 @@ Capybara::SpecHelper.spec '#refresh' do end it "it reposts" do - if marionette?(@session) || edge?(@session) + if marionette?(@session) || edge?(@session) || ie?(@session) skip "Firefox and Edge insist on prompting without providing a way to suppress" end @session.visit('/form') diff --git a/lib/capybara/spec/spec_helper.rb b/lib/capybara/spec/spec_helper.rb index 17ff16b4..14991c8c 100644 --- a/lib/capybara/spec/spec_helper.rb +++ b/lib/capybara/spec/spec_helper.rb @@ -137,6 +137,10 @@ module Capybara 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_ie.rb b/spec/selenium_spec_ie.rb index a4c351f5..16e61c87 100644 --- a/spec/selenium_spec_ie.rb +++ b/spec/selenium_spec_ie.rb @@ -18,7 +18,7 @@ module TestSessions SeleniumIE = Capybara::Session.new(:selenium_ie, TestApp) end -skipped_tests = %i[response_headers status_code trigger modals form_attribute] +skipped_tests = %i[response_headers status_code trigger modals hover form_attribute] $stdout.puts `#{Selenium::WebDriver::IE.driver_path} --version` if ENV['CI']