Class: Smartshot::Screenshot

Inherits:
Object
  • Object
show all
Includes:
Capybara::DSL
Defined in:
lib/smartshot/screenshot.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Screenshot

Returns a new instance of Screenshot.



15
16
17
# File 'lib/smartshot/screenshot.rb', line 15

def initialize(options = {})
  Smartshot::Screenshot.setup_capybara(options)
end

Class Method Details

.setup_capybara(options = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/smartshot/screenshot.rb', line 5

def self.setup_capybara(options = {})
  defaults = { js_errors: false, phantomjs_options: ['--ignore-ssl-errors=yes', '--ssl-protocol=any'] }
  Capybara.register_driver :poltergeist do |app|
    Capybara::Poltergeist::Driver.new(app, defaults.merge(options))
  end
  Capybara.run_server = options.delete(:run_server) || false
  Capybara.current_driver = :poltergeist
  Capybara.default_wait_time = options.delete(:default_wait_time) || 30
end

Instance Method Details

#take_screenshot!(params = {}) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/smartshot/screenshot.rb', line 19

def take_screenshot!(params = {})
  options = { full: true, output: 'screenshot.png', url: 'http://ca.ios.ba', wait_for_element: 'body', frames_path: [] }.merge(params)
  begin
    visit options.delete(:url)
    inside_frames options.delete(:frames_path) do
      [options.delete(:wait_for_element)].flatten.each do |element|
        page.find element
      end
    end

    timeout = options.delete(:sleep)
    sleep timeout unless timeout.nil?

    page.driver.save_screenshot(options.delete(:output), options)
  rescue => e
    raise SmartshotError.new("Error: #{e.message.inspect}")
  end
end