123456789_123456789_123456789_123456789_123456789_

Class: Selenium::WebDriver::Options

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Inherits: Object
Defined in: rb/lib/selenium/webdriver/common/options.rb

Constant Summary

Class Attribute Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(**opts) ⇒ Options

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 71

def initialize(**opts)
  self.class.set_capabilities

  @options = opts
  @options[:browser_name] = self.class::BROWSER
end

Class Attribute Details

.driver_path (readonly)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 30

attr_reader :driver_path

Class Method Details

.chrome(**opts)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 32

def chrome(**opts)
  Chrome::Options.new(**opts)
end

.edge(**opts) Also known as: .microsoftedge

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 45

def edge(**opts)
  Edge::Options.new(**opts)
end

.firefox(**opts)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 36

def firefox(**opts)
  Firefox::Options.new(**opts)
end

.ie(**opts) Also known as: .internet_explorer

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 40

def ie(**opts)
  IE::Options.new(**opts)
end

.internet_explorer(**opts)

Alias for .ie.

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 43

alias internet_explorer ie

.microsoftedge(**opts)

Alias for .edge.

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 48

alias microsoftedge edge

.safari(**opts)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 50

def safari(**opts)
  Safari::Options.new(**opts)
end

.set_capabilities

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 54

def set_capabilities
  (W3C_OPTIONS + self::CAPABILITIES.keys).each do |key|
    next if method_defined? key

    define_method key do
      @options[key]
    end

    define_method :"#{key}=" do |value|
      @options[key] = value
    end
  end
end

Instance Attribute Details

#options (rw)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 69

attr_accessor :options

Instance Method Details

#==(other) Also known as: #eql?

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 94

def ==(other)
  return false unless other.is_a? self.class

  as_json == other.as_json
end

#add_option(name, value = nil)

Add a new option not yet handled by bindings.

Examples:

Leave Chrome open when chromedriver is killed

options = Selenium::WebDriver::Chrome::Options.new
options.add_option(:detach, true)

Parameters:

  • name (String, Symbol)

    Name of the option

  • value (Boolean, String, Integer) (defaults to: nil)

    Value of the option

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 89

def add_option(name, value = nil)
  name, value = name.first if value.nil? && name.is_a?(Hash)
  @options[name] = value
end

#as_json

This method is for internal use only.
[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 106

def as_json(*)
  options = @options.dup

  downloads = options.delete(:enable_downloads)
  options['se:downloadsEnabled'] = downloads unless downloads.nil?
  w3c_options = process_w3c_options(options)

  browser_options = self.class::CAPABILITIES.each_with_object({}) do |(capability_alias, capability_name), hash|
    capability_value = options.delete(capability_alias)
    hash[capability_name] = capability_value unless capability_value.nil?
  end

  raise Error::WebDriverError, "These options are not w3c compliant: #{options}" unless options.empty?

  browser_options = {self.class::KEY => browser_options} if defined?(self.class::KEY)

  process_browser_options(browser_options)
  generate_as_json(w3c_options.merge(browser_options))
end

#camel_case(str) (private)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 179

def camel_case(str)
  str.gsub(/_([a-z])/) { Regexp.last_match(1)&.upcase }
end

#camelize?(_key) ⇒ Boolean (private)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 143

def camelize?(_key)
  true
end

#convert_json_key(key, camelize: true) (private)

Raises:

  • (TypeError)
[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 171

def convert_json_key(key, camelize: true)
  key = key.to_s if key.is_a?(Symbol)
  key = camel_case(key) if camelize
  return key if key.is_a?(String)

  raise TypeError, "expected String or Symbol, got #{key.inspect}:#{key.class}"
end

#eql?(other)

Alias for #==.

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 100

alias eql? ==

#generate_as_json(value, camelize_keys: true) (private)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 147

def generate_as_json(value, camelize_keys: true)
  if value.is_a?(Hash)
    process_json_hash(value, camelize_keys)
  elsif value.respond_to?(:as_json)
    value.as_json
  elsif value.is_a?(Array)
    value.map { |val| generate_as_json(val, camelize_keys: camelize_keys) }
  elsif value.is_a?(Symbol)
    value.to_s
  else
    value
  end
end

#process_browser_options(_browser_options) (private)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 139

def process_browser_options(_browser_options)
  nil
end

#process_json_hash(value, camelize_keys) (private)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 161

def process_json_hash(value, camelize_keys)
  value.each_with_object({}) do |(key, val), hash|
    next if val.respond_to?(:empty?) && val.empty?

    camelize = camelize_keys ? camelize?(key) : false
    key = convert_json_key(key, camelize: camelize)
    hash[key] = generate_as_json(val, camelize_keys: camelize)
  end
end

#process_w3c_options(options) (private)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 132

def process_w3c_options(options)
  w3c_options = options.select { |key, val| w3c?(key) && !val.nil? }
  w3c_options[:unhandled_prompt_behavior] &&= w3c_options[:unhandled_prompt_behavior]&.to_s&.tr('_', ' ')
  options.delete_if { |key, _val| w3c?(key) }
  w3c_options
end

#w3c?(key) ⇒ Boolean (private)

[ GitHub ]

  
# File 'rb/lib/selenium/webdriver/common/options.rb', line 128

def w3c?(key)
  W3C_OPTIONS.include?(key) || key.to_s.include?(':')
end