module Capybara::Selenium::Node::FileInputClickEmulation

Public Instance Methods

click(keys = [], **options) click to toggle source
Calls superclass method
# File lib/capybara/selenium/extensions/file_input_click_emulation.rb, line 5
def click(keys = [], **options)
  super
rescue Selenium::WebDriver::Error::InvalidArgumentError
  return emulate_click if attaching_file? && visible_file_field?

  raise
end

Private Instance Methods

attaching_file?() click to toggle source
# File lib/capybara/selenium/extensions/file_input_click_emulation.rb, line 19
def attaching_file?
  caller_locations.any? { |cl| cl.base_label == 'attach_file' }
end
emulate_click() click to toggle source
# File lib/capybara/selenium/extensions/file_input_click_emulation.rb, line 23
    def emulate_click
      driver.execute_script(<<~JS, self)
        arguments[0].dispatchEvent(
          new MouseEvent('click', {
            view: window,
            bubbles: true,
            cancelable: true
          }));
      JS
    end
visible_file_field?() click to toggle source
# File lib/capybara/selenium/extensions/file_input_click_emulation.rb, line 15
def visible_file_field?
  (attrs(:tagName, :type).map { |val| val&.downcase } == %w[input file]) && visible?
end