Sha256: 3e62f7530319b0f827a2d8ed1ca4f67264f20d07c95518a54e579dc1b63126c4

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

require 'selenium-webdriver'
require 'facets/hash/except'
require 'yaml'
require 'json'

module UserAgent
  def self.driver options={} 
    options[:browser] ||= :firefox
    options[:agent] ||= :iphone
    options[:orientation] ||= :portrait
    
    user_agent_string = agent_string_for options[:agent]
    device_resolution = resolution_for options[:agent], options[:orientation]

    case options[:browser]
      when :firefox
        options[:profile] ||= Selenium::WebDriver::Firefox::Profile.new
        options[:profile]['general.useragent.override'] = user_agent_string
      when :chrome
        options[:switches] ||= []
        options[:switches] << "--user-agent=#{user_agent_string}"
      else
        raise "WebDriver UserAgent currently only supports :firefox and :chrome."
    end
    driver = Selenium::WebDriver.for options[:browser], options.except(:browser, :agent, :orientation)
    resize_inner_window driver, *device_resolution
    driver
  end

  def self.devices
    @devices ||= YAML.load_file File.expand_path("../device-info/devices.yaml", __FILE__)
  end

  def self.resolution_for device_name, orientation
    device = devices[downcase_sym device_name][downcase_sym orientation]
    [device[:width],device[:height]]
  end

  def self.agent_string_for device
    user_agent_string = devices[downcase_sym device][:user_agent]
    raise "Unsupported user agent: '#{options[:agent]}'." unless user_agent_string
    user_agent_string 
  end 

  private

  def self.resize_inner_window driver, width, height
    if driver.browser == :firefox or :chrome
      driver.execute_script("window.open(#{driver.current_url.to_json},'_blank');")
      driver.close
      driver.switch_to.window driver.window_handles.first
    end
    driver.execute_script("window.innerWidth = #{width}; window.innerHeight = #{height};")
  end

  def self.downcase_sym sym
    sym.to_s.downcase.to_sym #to support ruby 1.8.x
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
webdriver-user-agent-0.1.0 lib/webdriver-user-agent.rb