class Smartshot::Screenshot

Public Class Methods

new(options = {}) click to toggle source
# File lib/smartshot/screenshot.rb, line 15
def initialize(options = {})
  Smartshot::Screenshot.setup_capybara(options)
end
setup_capybara(options = {}) click to toggle source
# 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_max_wait_time = options.delete(:default_wait_time) || 30
end

Public Instance Methods

take_screenshot(params = {}) click to toggle source
# 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)
  visit options.delete(:url)
  inside_frames options.delete(:frames_path) do
    [options.delete(:wait_for_element)].flatten.each do |element|
      visible = (element =~ /^(link|meta)/).nil?
      page.find element, visible: visible
    end
  end

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

  page.driver.save_screenshot(options.delete(:output), options)
end
take_screenshot!(params = {}) click to toggle source
# File lib/smartshot/screenshot.rb, line 35
def take_screenshot!(params = {})
  begin
    take_screenshot(params)
  rescue => e
    raise SmartshotError.new("Error: #{e.message.inspect}")
  end
end

Protected Instance Methods

inside_frames(frames = [], &block) click to toggle source
# File lib/smartshot/screenshot.rb, line 45
def inside_frames(frames = [], &block)
  block.call and return if frames.empty?
  frame = frames.shift
  within_frame frame do
    inside_frames(frames, &block)
  end
end