class Selenium::WebDriver::Remote::W3CCapabilities

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

Constants

DEFAULTS
KNOWN

Public Class Methods

edge(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 75
def edge(opts = {})
  new({
    :browser_name => "MicrosoftEdge",
    :platform => :windows,
      }.merge(opts))
end
ff(opts = {})
Alias for: firefox
firefox(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 82
def firefox(opts = {})
  opts[:browser_version] = opts.delete :version
  opts[:platform_name] = opts.delete :platform

  new({
    :browser_name => "firefox",
    :marionette => true
      }.merge(opts))
end
Also aliased as: ff
json_create(data) click to toggle source

@api private

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

  # Convert due to Remote Driver implementation
  data["browserVersion"] = data.delete("version") if data.key? "version"
  data["platformName"] = data.delete("platform") if data.key? "platform"

  caps = new
  caps.browser_name = data.delete("browserName") if data.key? "browserName"
  caps.browser_version = data.delete("browserVersion") if data.key? "browserVersion"
  caps.platform_name = data.delete("platformName") if data.key? "platformName"
  caps.platform_version = data.delete("platformVersion") if data.key? "platformVersion"
  caps.accept_ssl_certs = data.delete("acceptSslCerts") if data.key? "acceptSslCerts"
  caps.takes_screenshot = data.delete("takesScreenshot") if data.key? "takesScreenshot"
  caps.takes_element_screenshot = data.delete("takesElementScreenshot") if data.key? "takesElementScreenshot"
  caps.page_load_strategy = data.delete("pageLoadStrategy") if data.key? "pageloadStrategy"
  proxy = data.delete('proxy')
  caps.proxy = Proxy.json_create(proxy) unless proxy.nil? || proxy.empty?

  # Remote Server Specific
  caps[:remote_session_id] = data.delete('webdriver.remote.sessionid')

  # Obsolete capabilities returned by Remote Server
  data.delete("javascriptEnabled")
  data.delete('cssSelectorsEnabled')

  # Marionette Specific
  caps[:specification_level] = data.delete("specificationLevel")
  caps[:xul_app_id] = data.delete("XULappId")
  caps[:raise_accessibility_exceptions] = data.delete('raisesAccessibilityExceptions')
  caps[:rotatable] = data.delete('rotatable')
  caps[:app_build_id] = data.delete('appBuildId')
  caps[:device] = data.delete('device')

  # any remaining pairs will be added as is, with no conversion
  caps.merge!(data)
  caps
end
new(opts = {}) click to toggle source

@param [Hash] opts @option :browser_name [String] required browser name @option :browser_version [String] required browser version number @option :platform_name [Symbol] one of :any, :win, :mac, or :x @option :platform_version [String] required platform version number @option :accept_ssl_certs [Boolean] does the driver accept SSL Cerfifications? @option :takes_screenshot [Boolean] can this driver take screenshots? @option :takes_element_screenshot [Boolean] can this driver take element screenshots? @option :proxy [Selenium::WebDriver::Proxy, Hash] proxy configuration

@api public

# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 155
def initialize(opts = {})
  @capabilities = DEFAULTS.merge(opts)
  self.proxy = opts.delete(:proxy)
end
w3c?(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 94
def w3c?(opts = {})
  opts[:desired_capabilities].is_a?(W3CCapabilities) || opts[:marionette]
end

Public Instance Methods

==(other) click to toggle source
# File lib/selenium/webdriver/remote/w3c_capabilities.rb, line 221
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/w3c_capabilities.rb, line 168
def [](key)
  @capabilities[key]
end
[]=(key, value) click to toggle source

Allows setting arbitrary capabilities.

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

@api private

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

  @capabilities.each do |key, value|
    case key
    when :platform
      hash['platform'] = value.to_s.upcase
    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/w3c_capabilities.rb, line 172
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/w3c_capabilities.rb, line 182
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/w3c_capabilities.rb, line 217
def to_json(*args)
  JSON.generate as_json
end

Protected Instance Methods

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

Private Instance Methods

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