class Selenium::WebDriver::Chrome::Bridge

@api private

Public Class Methods

new(opts = {}) click to toggle source
Calls superclass method
# File lib/selenium/webdriver/chrome/bridge.rb, line 8
def initialize(opts = {})
  http_client = opts.delete(:http_client)

  if opts.has_key?(:url)
    url = opts.delete(:url)
  else
    @service = Service.default_service(*extract_service_args(opts))
    @service.start

    url = @service.uri
  end

  caps = create_capabilities(opts)

  remote_opts = {
    :url                  => url,
    :desired_capabilities => caps
  }

  remote_opts.merge!(:http_client => http_client) if http_client

  super(remote_opts)
end

Public Instance Methods

browser() click to toggle source
# File lib/selenium/webdriver/chrome/bridge.rb, line 32
def browser
  :chrome
end
capabilities() click to toggle source
# File lib/selenium/webdriver/chrome/bridge.rb, line 43
def capabilities
  @capabilities ||= Remote::Capabilities.chrome
end
driver_extensions() click to toggle source
# File lib/selenium/webdriver/chrome/bridge.rb, line 36
def driver_extensions
  [
    DriverExtensions::TakesScreenshot,
    DriverExtensions::HasInputDevices
  ]
end
quit() click to toggle source
Calls superclass method
# File lib/selenium/webdriver/chrome/bridge.rb, line 47
def quit
  super
ensure
  @service.stop if @service
end

Private Instance Methods

create_capabilities(opts) click to toggle source
# File lib/selenium/webdriver/chrome/bridge.rb, line 55
def create_capabilities(opts)
  caps                        = opts.delete(:desired_capabilities) { Remote::Capabilities.chrome }
  args                        = opts.delete(:args) || opts.delete(:switches)
  native_events               = opts.delete(:native_events)
  verbose                     = opts.delete(:verbose)
  profile                     = opts.delete(:profile)
  detach                      = opts.delete(:detach)
  proxy                       = opts.delete(:proxy)
  no_website_testing_defaults = opts.delete(:no_website_testing_defaults)
  prefs                       = opts.delete(:prefs)

  unless opts.empty?
    raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
  end

  chrome_options = caps['chromeOptions'] || {}

  if args
    unless args.kind_of? Array
      raise ArgumentError, ":args must be an Array of Strings"
    end

    chrome_options['args'] = args.map { |e| e.to_s }
  end

  if profile
    data = profile.as_json

    chrome_options.merge! 'profile'    => data['zip'],
                          'extensions' => data['extensions']
  end


  chrome_options['binary']                   = Chrome.path if Chrome.path
  chrome_options['nativeEvents']             = true if native_events
  chrome_options['verbose']                  = true if verbose
  chrome_options['detach']                   = detach.nil? || !!detach
  chrome_options['noWebsiteTestingDefaults'] = true if no_website_testing_defaults
  chrome_options['prefs']                    = prefs if prefs

  caps['chromeOptions'] = chrome_options
  caps['proxy'] = proxy if proxy

  # legacy options - for chromedriver < 17.0.963.0
  caps["chrome.switches"] = chrome_options['args'] if chrome_options.member?('args')
  %w[binary detach extensions nativeEvents noWebsiteTestingDefaults prefs profile verbose].each do |key|
    caps["chrome.#{key}"] = chrome_options[key] if chrome_options.member?(key)
  end

  caps
end
extract_service_args(opts) click to toggle source
# File lib/selenium/webdriver/chrome/bridge.rb, line 107
def extract_service_args(opts)
  args = []

  if opts.has_key?(:service_log_path)
    args << "--log-path=#{opts.delete(:service_log_path)}"
  end

  args
end