Try this.
module CapybaraNodeElementExtension def closest(*args) parent = first(:xpath, './/..', wait: false) until parent.matches_selector?(*args) # return nil if not found if parent.matches_selector?(:xpath, '/HTML') parent = nil break end parent = parent.first(:xpath, './/..', wait: false) end parent end end Capybara::Node::Element.send(:include, CapybaraNodeElementExtension)
This code did not work with version 2.18. matches_selector? out of order. Please try 3.7.
source share