class Selenium::WebDriver::Chrome::Driver

Driver implementation for Chrome. @api private

Public Class Methods

new(opts = {}) click to toggle source
Calls superclass method Selenium::WebDriver::Driver::new
# File lib/selenium/webdriver/chrome/driver.rb, line 37
def initialize(opts = {})
  opts[:desired_capabilities] = create_capabilities(opts)

  opts[:url] ||= service_url(opts)

  listener = opts.delete(:listener)
  @bridge = Remote::Bridge.handshake(**opts)
  @bridge.extend Bridge

  super(@bridge, listener: listener)
end

Public Instance Methods

browser() click to toggle source
# File lib/selenium/webdriver/chrome/driver.rb, line 49
def browser
  :chrome
end
execute_cdp(cmd, **params) click to toggle source
# File lib/selenium/webdriver/chrome/driver.rb, line 59
def execute_cdp(cmd, **params)
  @bridge.send_command(cmd: cmd, params: params)
end
quit() click to toggle source
Calls superclass method Selenium::WebDriver::Driver#quit
# File lib/selenium/webdriver/chrome/driver.rb, line 53
def quit
  super
ensure
  @service&.stop
end

Private Instance Methods

create_capabilities(opts) click to toggle source
# File lib/selenium/webdriver/chrome/driver.rb, line 65
def create_capabilities(opts)
  caps = opts.delete(:desired_capabilities) { Remote::Capabilities.chrome }
  options = opts.delete(:options) { Options.new }

  args = opts.delete(:args) || opts.delete(:switches)
  if args
    WebDriver.logger.deprecate ':args or :switches', 'Selenium::WebDriver::Chrome::Options#add_argument'
    raise ArgumentError, ':args must be an Array of Strings' unless args.is_a? Array

    args.each { |arg| options.add_argument(arg.to_s) }
  end

  profile = opts.delete(:profile)
  if profile
    WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome::Driver#new with `:profile` parameter',
                               'Selenium::WebDriver::Chrome::Options#profile or Options#add_option'

    profile = profile.as_json

    if options.args.none?(&/user-data-dir/.method(:match?))
      options.add_argument("--user-data-dir=#{profile['directory']}")
    end

    if profile['extensions']
      WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome::Profile#extensions',
                                 'Selenium::WebDriver::Chrome::Options#add_extension'
      profile['extensions'].each do |extension|
        options.add_encoded_extension(extension)
      end
    end
  end

  if opts.key?(:detach)
    WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome::Driver#new with `:detach` parameter',
                               'Selenium::WebDriver::Chrome::Options#new or Options#add_option'
    options.add_option(:detach, opts.delete(:detach))
  end

  prefs = opts.delete(:prefs)
  if prefs
    WebDriver.logger.deprecate ':prefs', 'Selenium::WebDriver::Chrome::Options#add_preference'
    prefs.each do |key, value|
      options.add_preference(key, value)
    end
  end

  options = options.as_json
  caps.merge!(options) unless options[Options::KEY].empty?

  if opts.key?(:proxy) || opts.key?('proxy')
    WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome::Driver#new with `:proxy` parameter',
                               'Selenium::WebDriver::Chrome::Capabilities#proxy='

    caps[:proxy] = opts.delete(:proxy) if opts.key?(:proxy)
    caps[:proxy] ||= opts.delete('proxy') if opts.key?('proxy')
  end

  caps
end