master
 1class PageModel
 2  include Capybara::DSL
 3  include Rails.application.routes.url_helpers
 4  attr_reader :page_path
 5
 6  def initialize(page_path)
 7    @page_path = page_path
 8  end
 9
10  def visit_page
11    visit page_path
12    self
13  end
14
15  def on_page?
16    current_path == page_path
17  end
18
19  def wait_for_ajax
20    yield if block_given?
21    Timeout.timeout(Capybara.default_max_wait_time) do
22      loop until finished_all_ajax_requests?
23    end
24  end
25
26  def login_with(username, password)
27    LoginPage.new.tap do |login_page|
28      login_page.visit_page
29      login_page.login_with(username, password)
30    end
31  end
32
33  def pretty_print
34    Nokogiri::HTML(page.html)
35  end
36
37  def record_failure(dir = Rails.root.join("tmp", "screenshots"))
38    puts pretty_print
39    FileUtils.mkdir_p(dir)
40    now = DateTime.now
41    path = File.join(dir, "#{now.to_s.parameterize}.png")
42    puts "saving screenshot to: #{path}"
43    page.save_screenshot(path, full: true)
44  rescue => error
45    puts error.inspect
46  end
47
48  private
49
50  def translate(key)
51    I18n.translate(key)
52  end
53
54  def finished_all_ajax_requests?
55    page.evaluate_script("jQuery.active").zero?
56  end
57end