Optimize disabled checking to one call where possible
This commit is contained in:
parent
47c1da23ca
commit
75a309a9dd
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue