class TransactionalCapybara::AjaxHelpers::PageWaiting
Public Class Methods
new(page)
click to toggle source
# File lib/transactional_capybara/ajax_helpers.rb, line 4 def initialize(page) @page = page end
Public Instance Methods
finished_ajax_requests?()
click to toggle source
# File lib/transactional_capybara/ajax_helpers.rb, line 22 def finished_ajax_requests? ( angular_requests + jquery_requests ).zero? end
finished_all_ajax_requests?()
click to toggle source
# File lib/transactional_capybara/ajax_helpers.rb, line 12 def finished_all_ajax_requests? capybara_sessions.all? do |name, session| if is_session_touched?(session) PageWaiting.new(session).finished_ajax_requests? else true end end end
wait_for_ajax()
click to toggle source
# File lib/transactional_capybara/ajax_helpers.rb, line 8 def wait_for_ajax wait_until { finished_all_ajax_requests? } end
wait_until(timeout=default_timeout)
click to toggle source
TODO: timeout each individual session
# File lib/transactional_capybara/ajax_helpers.rb, line 27 def wait_until(timeout=default_timeout) Timeout.timeout(timeout) do until yield sleep(0.01) end end rescue Timeout::Error # Oh well, hopefully it finished! end
Private Instance Methods
angular?()
click to toggle source
# File lib/transactional_capybara/ajax_helpers.rb, line 63 def angular? run_js("!!window.angular") && run_js("!!document.querySelector('[ng-app]')") end
angular_requests()
click to toggle source
# File lib/transactional_capybara/ajax_helpers.rb, line 67 def angular_requests if angular? run_js("angular.element(document.querySelector('[ng-app]')).injector().get('$http').pendingRequests.length") else 0 end end
capybara_sessions()
click to toggle source
Hack into Capybara's private interface to get access to all sessions
# File lib/transactional_capybara/ajax_helpers.rb, line 40 def capybara_sessions Capybara.send :session_pool end
default_timeout()
click to toggle source
Handle Capybara.default_wait_time deprecation github.com/jnicklas/capybara/pull/1502
# File lib/transactional_capybara/ajax_helpers.rb, line 46 def default_timeout @default_timeout ||= begin Capybara.respond_to?(:default_max_wait_time) ? Capybara.default_max_wait_time : Capybara.default_wait_time end end
is_session_touched?(session)
click to toggle source
Another hack, to see if Capybara sessions have been used
# File lib/transactional_capybara/ajax_helpers.rb, line 55 def is_session_touched?(session) session.instance_variable_get(:@touched) end
jquery?()
click to toggle source
# File lib/transactional_capybara/ajax_helpers.rb, line 75 def jquery? run_js("!!window.jQuery") end
jquery_requests()
click to toggle source
# File lib/transactional_capybara/ajax_helpers.rb, line 79 def jquery_requests if jquery? run_js("jQuery.active") else 0 end end
run_js(expr)
click to toggle source
# File lib/transactional_capybara/ajax_helpers.rb, line 59 def run_js(expr) @page.evaluate_script(expr) end