class Gnawrnip::Screenshot

Public Class Methods

session() click to toggle source
# File lib/gnawrnip/screenshot.rb, line 44
def session
  Capybara.current_session
end
shot() click to toggle source

@return [Tempfile]

# File lib/gnawrnip/screenshot.rb, line 51
def shot
  Tempfile.open(['gnawrnip', '.png']) do |fp|
    session.save_screenshot(fp.path)
    fp
  end
end
take(wait_second = Capybara.default_max_wait_time) click to toggle source

Screenshot of current capybara session

When browser is still loading page, raise follow exception (maybe…)

Selenium::WebDriver::Error::UnknownError:
  Could not take screenshot of current page - TypeError: c is null

So, to retry during wait_second seconds.

@example

image = Gnawrnip::Screenshot.take

@param [Fixnum] wait_second Second to repeat the retry @return [Tempfile] Image file of screenshot

# File lib/gnawrnip/screenshot.rb, line 24
def take(wait_second = Capybara.default_max_wait_time)
  start_time = Time.now

  begin
    shot
  rescue Capybara::NotSupportedByDriverError => e
    raise e
  rescue => e
    if (Time.now - start_time) < wait_second
      sleep(0.3)
      retry
    end

    $stderr.puts "WARNING: Timeout!! Can't take screenshot"
    $stderr.puts "  #{e}"

    nil
  end
end