nowk
8/21/2013 - 7:04 PM

capybara_wait_until.rb

# add this file capybara_wait_until.rb to your /test directory

module Capybara
  class Session
    ##
    #
    # Retry executing the block until a truthy result is returned or the timeout time is exceeded
    #
    # @param [Integer] timeout   The amount of seconds to retry executing the given block
    #
    # this method was removed in Capybara v2 so adding it back if not already defined
    #
    unless defined?(wait_until)
      def wait_until(timeout = Capybara.default_wait_time)
        Capybara.send(:timeout, timeout, driver) { yield }
      end
    end
  end
end

# Use it this way in /test/integration_test_helper.rb:

require 'capybara_wait_until'
module ActionController
  class IntegrationTest
    def wait_for_ajax_to_complete
      # pass timeout in seconds if you need to override default_wait_time
      page.wait_until { page.evaluate_script('jQuery.active === 0') }
    end
  end
end