Module: Dekiru::Capybara::Helpers
- Defined in:
- lib/dekiru/capybara/helpers.rb
Defined Under Namespace
Classes: Error
Instance Method Summary collapse
- #finished_all_ajax_requests? ⇒ Boolean
- #wait_for_ajax ⇒ Object
- #wait_for_event(event) ⇒ Object
- #wait_until(timeout: ::Capybara.default_max_wait_time, interval: 0.2, **opts, &block) ⇒ Object
Instance Method Details
#finished_all_ajax_requests? ⇒ Boolean
35 36 37 |
# File 'lib/dekiru/capybara/helpers.rb', line 35 def finished_all_ajax_requests? page.evaluate_script('jQuery.active').zero? end |
#wait_for_ajax ⇒ Object
31 32 33 |
# File 'lib/dekiru/capybara/helpers.rb', line 31 def wait_for_ajax wait_until { finished_all_ajax_requests? } end |
#wait_for_event(event) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/dekiru/capybara/helpers.rb', line 6 def wait_for_event(event) page.execute_script(<<~"EOS") (function(){ var eventName = '#{event}'; window._dekiruCapybaraWaitEvents = window._dekiruCapybaraWaitEvents || {}; window._dekiruCapybaraWaitEvents[eventName] = 1; jQuery(document).one(eventName, function(){window._dekiruCapybaraWaitEvents[eventName] = 0;}); })(); EOS yield script = <<~"EOS" (function(){ var eventName = '#{event}'; return window._dekiruCapybaraWaitEvents && window._dekiruCapybaraWaitEvents[eventName]; })(); EOS wait_until do result = page.evaluate_script(script) raise Error, 'wait_for_event: Missing context. probably moved to another page.' if result.nil? result == 0 end end |
#wait_until(timeout: ::Capybara.default_max_wait_time, interval: 0.2, **opts, &block) ⇒ Object
39 40 41 42 43 44 45 46 47 |
# File 'lib/dekiru/capybara/helpers.rb', line 39 def wait_until(timeout: ::Capybara.default_max_wait_time, interval: 0.2, **opts, &block) if defined?(Selenium::WebDriver::Wait) Selenium::WebDriver::Wait.new(opts.merge(timeout: timeout, interval: interval)).until { yield } else Timeout.timeout(timeout) do sleep(interval) until yield end end end |