class Selenium::WebDriver::Remote::Capabilities

Specification of the desired and/or actual capabilities of the browser that the server is being asked to create.

Constants

DEFAULTS

Public Class Methods

android(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 44
def android(opts = {})
  new({
    :browser_name       => "android",
    :platform           => :android,
    :javascript_enabled => true,
    :rotatable          => true,
    :takes_screenshot   => true
  }.merge(opts))
end
chrome(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 54
def chrome(opts = {})
  new({
    :browser_name          => "chrome",
    :javascript_enabled    => true,
    :css_selectors_enabled => true
  }.merge(opts))
end
firefox(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 62
def firefox(opts = {})
  new({
    :browser_name          => "firefox",
    :javascript_enabled    => true,
    :takes_screenshot      => true,
    :css_selectors_enabled => true
  }.merge(opts))
end
htmlunit(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 71
def htmlunit(opts = {})
  new({
    :browser_name => "htmlunit"
  }.merge(opts))
end
htmlunitwithjs(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 77
def htmlunitwithjs(opts = {})
  new({
    :browser_name => "htmlunit",
    :javascript_enabled => true
  }.merge(opts))
end
ie(opts = {})
Alias for: internet_explorer
internet_explorer(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 84
def internet_explorer(opts = {})
  new({
    :browser_name          => "internet explorer",
    :platform              => :windows,
    :takes_screenshot      => true,
    :css_selectors_enabled => true,
    :native_events         => true
  }.merge(opts))
end
Also aliased as: ie
ipad(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 103
def ipad(opts = {})
  new({
    :browser_name       => "iPad",
    :platform           => :mac,
    :javascript_enabled => true
  }.merge(opts))
end
iphone(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 95
def iphone(opts = {})
  new({
    :browser_name       => "iPhone",
    :platform           => :mac,
    :javascript_enabled => true
  }.merge(opts))
end
json_create(data) click to toggle source

@api private

# File lib/selenium/webdriver/remote/capabilities.rb, line 142
def json_create(data)
  data = data.dup

  caps = new
  caps.browser_name          = data.delete("browserName")
  caps.version               = data.delete("version")
  caps.platform              = data.delete("platform").downcase.to_sym if data.has_key?('platform')
  caps.javascript_enabled    = data.delete("javascriptEnabled")
  caps.css_selectors_enabled = data.delete("cssSelectorsEnabled")
  caps.takes_screenshot      = data.delete("takesScreenshot")
  caps.native_events         = data.delete("nativeEvents")
  caps.rotatable             = data.delete("rotatable")
  caps.proxy                 = Proxy.json_create(data['proxy']) if data.has_key?('proxy')

  # any remaining pairs will be added as is, with no conversion
  caps.merge!(data)

  caps
end
new(opts = {}) click to toggle source

@option :browser_name [String] required browser name @option :version [String] required browser version number @option :platform [Symbol] one of :any, :win, :mac, or :x @option :javascript_enabled [Boolean] does the driver have javascript enabled? @option :css_selectors_enabled [Boolean] does the driver support CSS selectors? @option :takes_screenshot [Boolean] can this driver take screenshots? @option :native_events [Boolean] does this driver use native events? @option :proxy [Selenium::WebDriver::Proxy, Hash] proxy configuration

Firefox-specific options:

@option :firefox_profile [Selenium::WebDriver::Firefox::Profile] the firefox profile to use

@api public

# File lib/selenium/webdriver/remote/capabilities.rb, line 179
def initialize(opts = {})
  @capabilities = DEFAULTS.merge(opts)
  self.proxy    = opts.delete(:proxy)
end
opera(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 111
def opera(opts = {})
  new({
    :browser_name          => "opera",
    :javascript_enabled    => true,
    :takes_screenshot      => true,
    :css_selectors_enabled => true
  }.merge(opts))
end
phantomjs(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 120
def phantomjs(opts = {})
  new({
    :browser_name          => "phantomjs",
    :javascript_enabled    => true,
    :takes_screenshot      => true,
    :css_selectors_enabled => true
  }.merge(opts))
end
safari(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 129
def safari(opts = {})
  new({
    :browser_name          => "safari",
    :javascript_enabled    => true,
    :takes_screenshot      => true,
    :css_selectors_enabled => true
  }.merge(opts))
end

Public Instance Methods

==(other) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 247
def ==(other)
  return false unless other.kind_of? self.class
  as_json == other.as_json
end
Also aliased as: eql?
[](key) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 192
def [](key)
  @capabilities[key]
end
[]=(key, value) click to toggle source

Allows setting arbitrary capabilities.

# File lib/selenium/webdriver/remote/capabilities.rb, line 188
def []=(key, value)
  @capabilities[key] = value
end
as_json(opts = nil) click to toggle source

@api private

# File lib/selenium/webdriver/remote/capabilities.rb, line 220
def as_json(opts = nil)
  hash = {}

  @capabilities.each do |key, value|
    case key
    when :platform
      hash['platform'] = value.to_s.upcase
    when :firefox_profile
      hash['firefox_profile'] = value.as_json['zip'] if value
    when :proxy
      hash['proxy'] = value.as_json if value
    when String, :firefox_binary
      hash[key.to_s] = value
    when Symbol
      hash[camel_case(key.to_s)] = value
    else
      raise TypeError, "expected String or Symbol, got #{key.inspect}:#{key.class} / #{value.inspect}"
    end
  end

  hash
end
eql?(other)
Alias for: ==
merge!(other) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 196
def merge!(other)
  if other.respond_to?(:capabilities, true) && other.capabilities.kind_of?(Hash)
    @capabilities.merge! other.capabilities
  elsif other.kind_of? Hash
    @capabilities.merge! other
  else
    raise ArgumentError, "argument should be a Hash or implement #capabilities"
  end
end
proxy=(proxy) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 206
def proxy=(proxy)
  case proxy
  when Hash
    @capabilities[:proxy] = Proxy.new(proxy)
  when Proxy, nil
    @capabilities[:proxy] = proxy
  else
    raise TypeError, "expected Hash or #{Proxy.name}, got #{proxy.inspect}:#{proxy.class}"
  end
end
to_json(*args) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 243
def to_json(*args)
  WebDriver.json_dump as_json
end

Protected Instance Methods

capabilities() click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 255
def capabilities
  @capabilities
end

Private Instance Methods

camel_case(str) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 261
def camel_case(str)
  str.gsub(/_([a-z])/) { $1.upcase }
end