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

Attributes

capabilities[R]

Public Class Methods

chrome(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 75
def chrome(opts = {})
  new({
    browser_name: 'chrome',
    javascript_enabled: true,
    css_selectors_enabled: true
  }.merge(opts))
end
edge(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 83
def edge(opts = {})
  new({
    browser_name: 'MicrosoftEdge',
    platform: :windows
  }.merge(opts))
end
firefox(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 90
def firefox(opts = {})
  opts[:browser_version] = opts.delete(:version) if opts.key?(:version)
  opts[:platform_name] = opts.delete(:platform) if opts.key?(:platform)
  opts[:timeouts] = {}
  opts[:timeouts]['implicit'] = opts.delete(:implicit_timeout) if opts.key?(:implicit_timeout)
  opts[:timeouts]['pageLoad'] = opts.delete(:page_load_timeout) if opts.key?(:page_load_timeout)
  opts[:timeouts]['script'] = opts.delete(:script_timeout) if opts.key?(:script_timeout)
  new({browser_name: 'firefox', marionette: true}.merge(opts))
end
firefox_legacy(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 100
def firefox_legacy(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 109
def htmlunit(opts = {})
  new({
    browser_name: 'htmlunit'
  }.merge(opts))
end
htmlunitwithjs(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 115
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 122
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
json_create(data) click to toggle source

@api private

# File lib/selenium/webdriver/remote/capabilities.rb, line 157
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.tr(' ', '_').to_sym if data.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.key?('proxy') && !data['proxy'].empty?

  # 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

@api public

# File lib/selenium/webdriver/remote/capabilities.rb, line 191
def initialize(opts = {})
  @capabilities = DEFAULTS.merge(opts)
  self.proxy    = opts.delete(:proxy)
end
phantomjs(opts = {}) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 133
def phantomjs(opts = {})
  WebDriver.logger.deprecate 'Selenium support for PhantomJS', 'headless Chrome/Firefox or HTMLUnit'
  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 143
def safari(opts = {})
  new({
    browser_name: 'safari',
    platform: :mac,
    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 266
def ==(other)
  return false unless other.is_a? 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 204
def [](key)
  @capabilities[key]
end
[]=(key, value) click to toggle source

Allows setting arbitrary capabilities.

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

@api private

# File lib/selenium/webdriver/remote/capabilities.rb, line 233
def as_json(*) # rubocop:disable Metrics/CyclomaticComplexity
  hash = {}

  @capabilities.each do |key, value|
    case key
    when :platform
      hash['platform'] = value.to_s.upcase
    when :firefox_profile
      if value
        WebDriver.logger.deprecate(':firefox_profile capabilitiy', 'Selenium::WebDriver::Firefox::Options#profile')
        hash['firefox_profile'] = value.as_json['zip']
      end
    when :proxy
      hash['proxy'] = value.as_json if value
    when String, :firefox_binary
      if key == :firefox_binary && value
        WebDriver.logger.deprecate(':firefox_binary capabilitiy', 'Selenium::WebDriver::Firefox::Options#binary')
      end
      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: ==
javascript_enabled() click to toggle source

Returns javascript_enabled capability. It is true if not set explicitly.

# File lib/selenium/webdriver/remote/capabilities.rb, line 59
def javascript_enabled
  javascript_enabled = @capabilities.fetch(:javascript_enabled)
  javascript_enabled.nil? ? true : javascript_enabled
end
Also aliased as: javascript_enabled?
javascript_enabled?()
Alias for: javascript_enabled
merge!(other) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 208
def merge!(other)
  if other.respond_to?(:capabilities, true) && other.capabilities.is_a?(Hash)
    @capabilities.merge! other.capabilities
  elsif other.is_a? 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 218
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(*) click to toggle source
# File lib/selenium/webdriver/remote/capabilities.rb, line 262
def to_json(*)
  JSON.generate as_json
end

Private Instance Methods

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