123456789_123456789_123456789_123456789_123456789_

Module: Capybara::Selenium::Node::FileInputClickEmulation

Relationships & Source Files
Defined in: lib/capybara/selenium/extensions/file_input_click_emulation.rb

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#attaching_file?Boolean (readonly, private)

[ GitHub ]

  
# 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

#visible_file_field?Boolean (readonly, private)

[ GitHub ]

  
# 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

Instance Method Details

#click(keys = [], **options)

[ GitHub ]

  
# 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

#emulate_click (private)

[ GitHub ]

  
# 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