Optimize disabled checking to one call where possible

This commit is contained in:
Thomas Walpole 2019-04-25 14:24:17 -07:00
parent 47c1da23ca
commit 75a309a9dd
5 changed files with 23 additions and 21 deletions

View File

@ -1,5 +1,7 @@
# frozen_string_literal: true
require 'capybara/selenium/nodes/ie_node'
module Capybara::Selenium::Driver::InternetExplorerDriver
def switch_to_frame(frame)
return super unless frame == :parent
@ -10,6 +12,12 @@ module Capybara::Selenium::Driver::InternetExplorerDriver
browser.switch_to.default_content
handles.tap(&:pop).each { |fh| browser.switch_to.frame(fh) }
end
private
def build_node(native_node, initial_cache = {})
::Capybara::Selenium::IENode.new(self, native_node, initial_cache)
end
end
module Capybara::Selenium

View File

@ -35,6 +35,10 @@ class Capybara::Selenium::ChromeNode < Capybara::Selenium::Node
raise
end
def disabled?
driver.evaluate_script("arguments[0].matches(':disabled, select:disabled *')", self)
end
private
def file_errors

View File

@ -18,17 +18,7 @@ class Capybara::Selenium::FirefoxNode < Capybara::Selenium::Node
end
def disabled?
# Not sure exactly what version of FF fixed the below issue, but it is definitely fixed in 61+
return super unless browser_version < 61.0
return true if super
# workaround for selenium-webdriver/geckodriver reporting elements as enabled when they are nested in disabling elements
if %w[option optgroup].include? tag_name
find_xpath('parent::*[self::optgroup or self::select]')[0].disabled?
else
!find_xpath(DISABLED_BY_FIELDSET_XPATH).empty?
end
driver.evaluate_script("arguments[0].matches(':disabled, select:disabled *')", self)
end
def set_file(value) # rubocop:disable Naming/AccessorMethodName

View File

@ -0,0 +1,9 @@
# frozen_string_literal: true
require 'capybara/selenium/extensions/html5_drag'
class Capybara::Selenium::IENode < Capybara::Selenium::Node
def disabled?
driver.evaluate_script("arguments[0].msMatchesSelector(':disabled, select:disabled *')", self)
end
end

View File

@ -40,16 +40,7 @@ class Capybara::Selenium::SafariNode < Capybara::Selenium::Node
end
def disabled?
return true if super
# workaround for safaridriver reporting elements as enabled when they are nested in disabling elements
if %w[option optgroup].include? tag_name
return true if self[:disabled] == 'true'
find_xpath('parent::*[self::optgroup or self::select]')[0].disabled?
else
!find_xpath(DISABLED_BY_FIELDSET_XPATH).empty?
end
driver.evaluate_script("arguments[0].matches(':disabled, select:disabled *')", self)
end
def set_file(value) # rubocop:disable Naming/AccessorMethodName