diff --git a/lib/capybara/selenium/node.rb b/lib/capybara/selenium/node.rb index b6628801..5160914f 100644 --- a/lib/capybara/selenium/node.rb +++ b/lib/capybara/selenium/node.rb @@ -484,6 +484,12 @@ private JS end + def native_id + # Selenium 3 -> 4 changed the return of ref + type_or_id, id = native.ref + id || type_or_id + end + GET_XPATH_SCRIPT = <<~'JS' (function(el, xml){ var xpath = ''; diff --git a/lib/capybara/selenium/nodes/chrome_node.rb b/lib/capybara/selenium/nodes/chrome_node.rb index b9ff21d4..103affd2 100644 --- a/lib/capybara/selenium/nodes/chrome_node.rb +++ b/lib/capybara/selenium/nodes/chrome_node.rb @@ -63,9 +63,8 @@ class Capybara::Selenium::ChromeNode < Capybara::Selenium::Node def visible? return super unless native_displayed? - begin - bridge.send(:execute, :is_element_displayed, id: native.ref) + bridge.send(:execute, :is_element_displayed, id: native_id) rescue Selenium::WebDriver::Error::UnknownCommandError # If the is_element_displayed command is unknown, no point in trying again driver.options[:native_displayed] = false diff --git a/lib/capybara/selenium/nodes/edge_node.rb b/lib/capybara/selenium/nodes/edge_node.rb index d89ba362..924b603d 100644 --- a/lib/capybara/selenium/nodes/edge_node.rb +++ b/lib/capybara/selenium/nodes/edge_node.rb @@ -69,7 +69,7 @@ class Capybara::Selenium::EdgeNode < Capybara::Selenium::Node return super unless chrome_edge? && native_displayed? begin - bridge.send(:execute, :is_element_displayed, id: native.ref) + bridge.send(:execute, :is_element_displayed, id: native_id) rescue Selenium::WebDriver::Error::UnknownCommandError # If the is_element_displayed command is unknown, no point in trying again driver.options[:native_displayed] = false diff --git a/lib/capybara/selenium/nodes/firefox_node.rb b/lib/capybara/selenium/nodes/firefox_node.rb index dd2d65ba..57775ae1 100644 --- a/lib/capybara/selenium/nodes/firefox_node.rb +++ b/lib/capybara/selenium/nodes/firefox_node.rb @@ -76,7 +76,7 @@ class Capybara::Selenium::FirefoxNode < Capybara::Selenium::Node return super unless native_displayed? begin - bridge.send(:execute, :is_element_displayed, id: native.ref) + bridge.send(:execute, :is_element_displayed, id: native_id) rescue Selenium::WebDriver::Error::UnknownCommandError # If the is_element_displayed command is unknown, no point in trying again driver.options[:native_displayed] = false