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 35
def initialize(opts = {})
  opts[:desired_capabilities] = create_capabilities(opts)

  unless opts.key?(:url)
    driver_path = opts.delete(:driver_path) || Chrome.driver_path
    driver_opts = opts.delete(:driver_opts) || {}
    port = opts.delete(:port) || Service::DEFAULT_PORT

    @service = Service.new(driver_path, port, driver_opts)
    @service.start
    opts[:url] = @service.uri
  end

  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 55
def browser
  :chrome
end
quit() click to toggle source
Calls superclass method Selenium::WebDriver::Driver#quit
# File lib/selenium/webdriver/chrome/driver.rb, line 59
def quit
  super
ensure
  @service.stop if @service
end

Private Instance Methods

create_capabilities(opts) click to toggle source
# File lib/selenium/webdriver/chrome/driver.rb, line 67
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
    profile = profile.as_json

    if options.args.none? { |arg| arg =~ /user-data-dir/ }
      options.add_argument("--user-data-dir=#{profile[:directory]}")
    end

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

  detach = opts.delete(:detach)
  options.add_option(:detach, true) if detach

  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?

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

  caps
end