module DmcKanye::DriverHelpers

Public Instance Methods

open_ajax_requests?() click to toggle source
# File lib/dmc_kanye/driver_helpers.rb, line 32
def open_ajax_requests?
  !evaluate_script("(typeof jQuery === 'undefined') ? 0 : jQuery.active").zero?
rescue Capybara::NotSupportedByDriverError
  false
end
page_loaded?() click to toggle source
# File lib/dmc_kanye/driver_helpers.rb, line 38
def page_loaded?
  evaluate_script("document.readyState") == "complete"
rescue Capybara::NotSupportedByDriverError
  true
end
wait_for_in_progress_ajax_to_finish() click to toggle source
# File lib/dmc_kanye/driver_helpers.rb, line 53
def wait_for_in_progress_ajax_to_finish
  seconds = 0
  while open_ajax_requests?
    seconds += 0.05
    raise TimeoutException if seconds > timeout
    sleep 0.05
  end
end
wait_for_page_to_finish_loading() click to toggle source
# File lib/dmc_kanye/driver_helpers.rb, line 44
def wait_for_page_to_finish_loading
  seconds = 0
  while !page_loaded?
    seconds += 0.02
    raise TimeoutException if seconds > timeout
    sleep 0.02
  end
end
wait_for_page_to_settle() click to toggle source
# File lib/dmc_kanye/driver_helpers.rb, line 62
def wait_for_page_to_settle
  if !page_loaded?
    wait_for_page_to_finish_loading
    wait_for_page_to_settle
  end
  if open_ajax_requests?
    wait_for_in_progress_ajax_to_finish
    wait_for_page_to_settle
  end
end
wait_to_appear(method, selector) click to toggle source

If the browser is waiting for ajax or loading a page, Kanye is smart enough to deal with this. However, if the browser is busy doing something else for a significant period of time (such as long-running JavaScript), Kanye is not smart enough to know that there is something that needs finishing.

So basically, in the very rare cases that Kanye cannot detect that something needs to be waited for, you can explicitly wait for a DOM element to appear, for example:

wait_to_appear(:css, '.ui-autocomplete.ui-menu')

This will wait up to the poltergeist timeout value (which is probably 30 seconds) for this DOM element to appear before moving on. If the DOM element does not appear, an error is thrown.

# File lib/dmc_kanye/driver_helpers.rb, line 23
def wait_to_appear(method, selector)
  seconds = 0
  while find(method, selector).nil?
    seconds += 0.2
    raise TimeoutException if seconds > timeout
    sleep 0.2
  end
end