1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
# frozen_string_literal: true
class Capybara::Selenium::Node
module FileInputClickEmulation
def click(keys = [], **options)
super
rescue Selenium::WebDriver::Error::InvalidArgumentError
return emulate_click if attaching_file? && visible_file_field?
raise
end
private
def visible_file_field?
(attrs(:tagName, :type).map { |val| val&.downcase } == %w[input file]) && visible?
end
def attaching_file?
caller_locations.any? { |cl| cl.base_label == 'attach_file' }
end
def emulate_click
driver.execute_script(<<~JS, self)
arguments[0].dispatchEvent(
new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: true
}));
JS
end
end
end
|