mirror of
https://github.com/teamcapybara/capybara.git
synced 2022-11-09 12:08:07 -05:00
34 lines
791 B
Ruby
34 lines
791 B
Ruby
# 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
|