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