Class: Selenium::WebDriver::Options

Inherits:
Object
  • Object
show all
Defined in:
lib/selenium/webdriver/common/options.rb

Constant Summary collapse

W3C_OPTIONS =
i[browser_name browser_version platform_name accept_insecure_certs page_load_strategy proxy
set_window_rect timeouts unhandled_prompt_behavior strict_file_interactability
web_socket_url].freeze
GRID_OPTIONS =
i[enable_downloads].freeze

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**opts) ⇒ Options

Returns a new instance of Options.



71
72
73
74
75
76
77
78
# File 'lib/selenium/webdriver/common/options.rb', line 71

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

  opts[:web_socket_url] = opts.delete(:bidi) if opts.key?(:bidi)

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

Class Attribute Details

.driver_pathObject (readonly)

Returns the value of attribute driver_path.



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

def driver_path
  @driver_path
end

Instance Attribute Details

#optionsObject

Returns the value of attribute options.



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

def options
  @options
end

Class Method Details

.chromeObject



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

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

.edgeObject Also known as: microsoftedge



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

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

.firefoxObject



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

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

.ieObject Also known as: internet_explorer



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

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

.safariObject



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

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

.set_capabilitiesObject



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/selenium/webdriver/common/options.rb', line 54

def set_capabilities
  (W3C_OPTIONS + GRID_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 Method Details

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



104
105
106
107
108
# File 'lib/selenium/webdriver/common/options.rb', line 104

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

  as_json == other.as_json
end

#add_option(name, value = nil) ⇒ Object

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



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

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

#as_jsonObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/selenium/webdriver/common/options.rb', line 116

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

#bidi?Boolean

Returns:

  • (Boolean)


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

def bidi?
  !!@options[:web_socket_url]
end

#enable_bidi!Object



96
97
98
# File 'lib/selenium/webdriver/common/options.rb', line 96

def enable_bidi!
  @options[:web_socket_url] = true
end