2 require 'capybara/rails'
3 require 'capybara/poltergeist'
8 Capybara.default_wait_time = 5
10 Timeout.timeout(Capybara.default_wait_time) do
11 loop until finished_all_ajax_requests?
15 def finished_all_ajax_requests?
16 page.evaluate_script('jQuery.active').zero?
20 class ActionDispatch::IntegrationTest
21 # Make the Capybara DSL available in all integration tests
23 include ApiFixtureLoader
26 @@API_AUTHS = self.api_fixture('api_client_authorizations')
33 def page_with_token(token, path='/')
34 # Generate a page path with an embedded API token.
35 # Typical usage: visit page_with_token('token_name', page)
36 # The token can be specified by the name of an api_client_authorizations
37 # fixture, or passed as a raw string.
38 api_token = ((@@API_AUTHS.include? token) ?
39 @@API_AUTHS[token]['api_token'] : token)
40 sep = (path.include? '?') ? '&' : '?'
41 q_string = URI.encode_www_form('api_token' => api_token)
42 "#{path}#{sep}#{q_string}"
45 # Find a page element, but return false instead of raising an
46 # exception if not found. Use this with assertions to explain that
47 # the error signifies a failed test rather than an unexpected error
48 # during a testing procedure.
52 rescue Capybara::ElementNotFound
57 @@screenshot_count = 0
59 image_file = "./tmp/workbench-fail-#{@@screenshot_count += 1}.png"
60 page.save_screenshot image_file
61 puts "Saved #{image_file}"
68 if Capybara.current_driver == :selenium
69 page.execute_script("window.localStorage.clear()")