class Browser

Public Class Methods

new(baseurl, urls, resolutions, path, headless, wait, cookies = [], localStorage = []) click to toggle source
# File lib/controller/browser.rb, line 10
def initialize(baseurl, urls, resolutions, path, headless, wait, cookies = [], localStorage = [])
  @absolute_image_path = path
  FileUtils.mkdir_p @absolute_image_path
  @baseurl = baseurl
  @urls = urls
  @resolutions = resolutions
  @headless = headless
  @wait = wait

  if cookies
    @cookies = cookies
  else
    @cookies = []
  end

  if localStorage
    @localStorage = localStorage
  else
    @localStorage = []
  end
end

Public Instance Methods

end() click to toggle source
# File lib/controller/browser.rb, line 41
def end
  begin #Timeout::Error
    Timeout::timeout(10) { @browser.close }
  rescue Timeout::Error
    browser_pid = @browser.driver.instance_variable_get(:@bridge).instance_variable_get(:@service).instance_variable_get(:@process).pid
    ::Process.kill('KILL', browser_pid)
    sleep 1
  end
  sleep 5 # to prevent xvfb to freeze
end
record(version) click to toggle source
# File lib/controller/browser.rb, line 32
def record(version)
  browser_loader
  @urls.each do |url|
    @resolutions.each do |width|
      screenshot_recorder(width, url, version)
    end
  end
end

Private Instance Methods

browser_loader() click to toggle source
# File lib/controller/browser.rb, line 54
def browser_loader
  if @headless
    @browser = Watir::Browser.new :phantomjs
  else
    @browser = Watir::Browser.new :firefox
  end
end
screenshot_recorder(width, url, version) click to toggle source
# File lib/controller/browser.rb, line 62
def screenshot_recorder(width, url, version)
  filename = Helper.filename(@absolute_image_path, url, width, version)
  @browser.driver.manage.window.resize_to(width, 1000)

  url = Helper.url(@baseurl, url)

  if @cookies.any? || @localStorage.any?
    # load url first before setting cookies and/or localStorage values
    @browser.goto url

    if @cookies.any?
      @browser.cookies.clear
      @cookies.each do |cookie|
        @browser.cookies.add(cookie[:name], cookie[:value], domain: cookie[:domain], path: cookie[:path], expires: Time.now + 7200, secure: cookie[:secure])
      end
    end

    if @localStorage.any?
      @localStorage.each do |key, value|
        # Generate javascript for localStorage.setItem, escaping single quotes in key and value
        stmt = "localStorage.setItem('" + key.gsub("'", "\\\\'") + "','" + value.gsub("'", "\\\\'") + "')";
        @browser.execute_script(stmt)
      end
    end
  end

  @browser.goto url

  sleep @wait if @wait
  @browser.screenshot.save( File.expand_path(filename))
end