Module: Capybara::WaitImage

Included in:
Node::Element
Defined in:
lib/capybara/wait_image.rb,
lib/capybara/wait_image/version.rb

Overview

Wait for image to load automatically

Constant Summary collapse

VERSION =
"0.4.0"

Instance Method Summary collapse

Instance Method Details

#_loggerObject



50
51
52
53
54
55
56
# File 'lib/capybara/wait_image.rb', line 50

def _logger
  @_logger ||= if defined?(Rails)
                 Rails.logger
               else
                 Logger.new(File::NULL)
               end
end

#_stale_errorsObject



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/capybara/wait_image.rb', line 9

def _stale_errors
  return @_stale_errors if defined? @_stale_errors

  @_stale_errors = []
  if defined? ::Selenium::WebDriver::Error::StaleElementReferenceError
    @_stale_errors << ::Selenium::WebDriver::Error::StaleElementReferenceError
  end
  @_stale_errors << ::Ferrum::NodeNotFoundError if defined? ::Ferrum::NodeNotFoundError
  @_stale_errors << ::Capybara::Cuprite::ObsoleteNode if defined? ::Capybara::Cuprite::ObsoleteNode
  @_stale_errors
end

#_wait_for_image_loadingObject

rubocop:disable Metrics/MethodLength



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/capybara/wait_image.rb', line 21

def _wait_for_image_loading # rubocop:disable Metrics/MethodLength
  Timeout.timeout(Capybara.default_max_wait_time) do
    sleep 0.5 until evaluate_script(<<~JS)
      Array.prototype.every.call(
        document.querySelectorAll('img'),
        (e) => e.complete
      )
    JS
  end
rescue Timeout::Error
  _logger.debug "[capybara-wait_image]Timeout::Error"
rescue Capybara::NotSupportedByDriverError
  # It comes here when you run it in rack-test, but you can ignore it
rescue *_stale_errors
  _logger.debug "[capybara-wait_image]Stale Error"
  reload
  _wait_for_image_loading
end

#click(*keys, **options) ⇒ Object



40
41
42
43
# File 'lib/capybara/wait_image.rb', line 40

def click(*keys, **options)
  _wait_for_image_loading
  super
end

#hoverObject



45
46
47
48
# File 'lib/capybara/wait_image.rb', line 45

def hover
  _wait_for_image_loading
  super
end