Class: CapybaraHelper

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/acceptance_test/capybara/capybara_helper.rb

Constant Summary collapse

DEFAULT_DRIVER =
:selenium
DEFAULT_BROWSER =
:chrome
DEFAULT_WAIT_TIME =
2

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCapybaraHelper

Returns a new instance of CapybaraHelper.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/acceptance_test/capybara/capybara_helper.rb', line 13

def initialize
  Capybara.run_server = false

  if ENV['HEADLESS']
    begin
      require 'headless'

      @headless_mode = true
    rescue LoadError
      @headless_mode = false

      puts "Headless mode is not supported on this OS."
    end
  end

  @video_mode = ENV['VIDEO'] ? true : false

  @parallel_tests_mode = ENV['TEST_ENV_NUMBER'] ? true : false
end

Instance Attribute Details

#headless_modeObject (readonly)

Returns the value of attribute headless_mode.



11
12
13
# File 'lib/acceptance_test/capybara/capybara_helper.rb', line 11

def headless_mode
  @headless_mode
end

#video_modeObject (readonly)

Returns the value of attribute video_mode.



11
12
13
# File 'lib/acceptance_test/capybara/capybara_helper.rb', line 11

def video_mode
  @video_mode
end

Instance Method Details

#after_test(metadata: nil, exception: nil) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/acceptance_test/capybara/capybara_helper.rb', line 82

def after_test metadata: nil, exception: nil
  Capybara.default_driver = @old_driver
  Capybara.current_driver = @old_driver
  Capybara.javascript_driver = @old_driver

  Capybara.app_host = nil

  Capybara.configure do |conf|
    conf.default_max_wait_time = @old_default_max_wait_time
  end

  if headless_mode

    #p metadata[:file_path]

    #if exception
      #File.basename(e.metadata[:file_path]

      name = 'report'

      @headless.video.stop_and_save "video_#{test_number}_#{name}.mp4" if video_mode
    # else
    #   @headless.video.stop_and_discard if video_mode
    # end

    @headless.destroy
  end
end

#before_test(app_host:, driver: DEFAULT_DRIVER, browser: DEFAULT_BROWSER, wait_time: DEFAULT_WAIT_TIME) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/acceptance_test/capybara/capybara_helper.rb', line 33

def before_test(app_host:, driver: DEFAULT_DRIVER, browser: DEFAULT_BROWSER, wait_time: DEFAULT_WAIT_TIME)
  @old_driver = Capybara.current_driver

  driver_name = register_driver driver: driver, browser: browser, selenium_url: nil, capabilities: nil

  use_driver(driver_name)

  # driver_manager.setup_browser_binary config[:browser].to_sym, config[:browser_binaries]

  Capybara.app_host = app_host

  @old_default_max_wait_time = Capybara.default_max_wait_time

  Capybara.configure do |conf|
    conf.default_max_wait_time = wait_time

    # conf.match = :first
    #
    # conf.ignore_hidden_elements = false
  end

  if headless_mode
    headless_params = {}
    #headless_params[:display] = @parallel_tests_mode ? 100 + test_number : 1
    headless_params[:reuse] = @parallel_tests_mode ? true : false
    headless_params[:dimensions] = "1280x900x24"

    headless_params[:video] = {
      frame_rate: 12,
      provider: :ffmpeg,
      codec: :libx264,
      pid_file_name:  "/tmp/.headless_ffmpeg_#{test_number}.pid",
      tmp_file_name:  "/tmp/.headless_ffmpeg_#{test_number}.mp4",
      extra: ['-pix_fmt yuv420p', '-b 6144k', '-b 6144k'],
      log_file_path: STDERR
    } if video_mode

    @headless = Headless.new headless_params

    @headless.start

    #page.driver.browser.manage.window.resize_to(1280, 900)

    @headless.video.start_capture if video_mode
  end

  driver_name
end

#take_screenshotObject



115
116
117
118
119
# File 'lib/acceptance_test/capybara/capybara_helper.rb', line 115

def take_screenshot
  if headless_mode
    #@headless.take_screenshot
  end
end

#test_numberObject



111
112
113
# File 'lib/acceptance_test/capybara/capybara_helper.rb', line 111

def test_number
  @parallel_tests_mode ? + ENV['TEST_ENV_NUMBER'].to_i : 1
end