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