From 28d845facd167d9f726105b81091c079fca987ee Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Sat, 20 Jul 2019 12:41:46 -0700 Subject: [PATCH] Use geckodrivers is_element_displayed endpoint when available --- .../selenium/driver_specializations/firefox_driver.rb | 8 ++++++++ lib/capybara/selenium/nodes/firefox_node.rb | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/lib/capybara/selenium/driver_specializations/firefox_driver.rb b/lib/capybara/selenium/driver_specializations/firefox_driver.rb index 4669ed26..6c5b98c3 100644 --- a/lib/capybara/selenium/driver_specializations/firefox_driver.rb +++ b/lib/capybara/selenium/driver_specializations/firefox_driver.rb @@ -5,12 +5,20 @@ require 'capybara/selenium/nodes/firefox_node' module Capybara::Selenium::Driver::FirefoxDriver def self.extended(driver) driver.extend Capybara::Selenium::Driver::W3CFirefoxDriver if w3c?(driver) + bridge = driver.send(:bridge) + bridge.extend Capybara::Selenium::IsDisplayed unless bridge.commands(:is_element_displayed) end def self.w3c?(driver) (defined?(Selenium::WebDriver::VERSION) && (Selenium::WebDriver::VERSION.to_f >= 4)) || driver.browser.capabilities.is_a?(::Selenium::WebDriver::Remote::W3C::Capabilities) end + +private + + def bridge + browser.send(:bridge) + end end module Capybara::Selenium::Driver::W3CFirefoxDriver diff --git a/lib/capybara/selenium/nodes/firefox_node.rb b/lib/capybara/selenium/nodes/firefox_node.rb index ff947b96..1c6447c6 100644 --- a/lib/capybara/selenium/nodes/firefox_node.rb +++ b/lib/capybara/selenium/nodes/firefox_node.rb @@ -65,6 +65,12 @@ class Capybara::Selenium::FirefoxNode < Capybara::Selenium::Node click unless selected_or_disabled end + def visible? + return super if ENV['DISABLE_CAPYBARA_SELENIUM_OPTIMIZATIONS'] + + bridge.send(:execute, :is_element_displayed, id: native.ref) + end + private def click_with_options(click_options)