class Selenium::WebDriver::Options

Constants

W3C_OPTIONS

Attributes

driver_path[R]
options[RW]

Public Class Methods

chrome(**opts) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 30
def chrome(**opts)
  Chrome::Options.new(**opts)
end
edge(**opts) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 43
def edge(**opts)
  Edge::Options.new(**opts)
end
Also aliased as: microsoftedge
firefox(**opts) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 34
def firefox(**opts)
  Firefox::Options.new(**opts)
end
ie(**opts) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 38
def ie(**opts)
  IE::Options.new(**opts)
end
Also aliased as: internet_explorer
internet_explorer(**opts)
Alias for: ie
microsoftedge(**opts)
Alias for: edge
new(**opts) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 69
def initialize(**opts)
  self.class.set_capabilities

  @options = opts
  @options[:browser_name] = self.class::BROWSER
end
safari(**opts) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 48
def safari(**opts)
  Safari::Options.new(**opts)
end
set_capabilities() click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 52
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

Public Instance Methods

==(other) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 92
def ==(other)
  return false unless other.is_a? self.class

  as_json == other.as_json
end
Also aliased as: eql?
add_option(name, value = nil) click to toggle source

Add a new option not yet handled by bindings.

@example Leave Chrome open when chromedriver is killed

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

@param [String, Symbol] name Name of the option @param [Boolean, String, Integer] value Value of the option

# File lib/selenium/webdriver/common/options.rb, line 87
def add_option(name, value = nil)
  @options[name.keys.first] = name.values.first if value.nil? && name.is_a?(Hash)
  @options[name] = value
end
as_json(*) click to toggle source

@api private

# File lib/selenium/webdriver/common/options.rb, line 104
def as_json(*)
  options = @options.dup

  w3c_options = process_w3c_options(options)

  self.class::CAPABILITIES.each do |capability_alias, capability_name|
    capability_value = options.delete(capability_alias)
    options[capability_name] = capability_value if !capability_value.nil? && !options.key?(capability_name)
  end
  browser_options = defined?(self.class::KEY) ? {self.class::KEY => options} : options

  process_browser_options(browser_options)
  generate_as_json(w3c_options.merge(browser_options))
end
eql?(other)
Alias for: ==

Private Instance Methods

camel_case(str) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 172
def camel_case(str)
  str.gsub(/_([a-z])/) { Regexp.last_match(1).upcase }
end
camelize?(_key) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 136
def camelize?(_key)
  true
end
convert_json_key(key, camelize: true) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 164
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
generate_as_json(value, camelize_keys: true) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 140
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) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 132
def process_browser_options(_browser_options)
  nil
end
process_json_hash(value, camelize_keys) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 154
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) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 125
def process_w3c_options(options)
  w3c_options = options.select { |key, _val| w3c?(key) }
  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) click to toggle source
# File lib/selenium/webdriver/common/options.rb, line 121
def w3c?(key)
  W3C_OPTIONS.include?(key) || key.to_s.include?(':')
end