class Selenium::WebDriver::Driver

The main class through which you control the browser.

@see SearchContext @see Navigation @see TargetLocator @see Options

Attributes

bridge[R]

Public Class Methods

for(browser, opts = {}) click to toggle source

@api private

@see Selenium::WebDriver.for

@return [Driver]

# File lib/selenium/webdriver/common/driver.rb, line 44
def for(browser, opts = {})
  case browser
  when :chrome
    Chrome::Driver.new(**opts)
  when :internet_explorer, :ie
    IE::Driver.new(**opts)
  when :safari
    Safari::Driver.new(**opts)
  when :firefox, :ff
    Firefox::Driver.new(**opts)
  when :edge
    Edge::Driver.new(**opts)
  when :remote
    Remote::Driver.new(**opts)
  else
    raise ArgumentError, "unknown driver: #{browser.inspect}"
  end
end
new(bridge: nil, listener: nil, **opts) click to toggle source

A new Driver instance with the given bridge. End users should use Selenium::WebDriver.for instead of using this directly.

@api private

# File lib/selenium/webdriver/common/driver.rb, line 71
def initialize(bridge: nil, listener: nil, **opts)
  @service = nil
  @devtools = nil
  bridge ||= create_bridge(**opts)
  add_extensions(bridge.browser)
  @bridge = listener ? Support::EventFiringBridge.new(bridge, listener) : bridge
end

Public Instance Methods

[](sel) click to toggle source

Get the first element matching the given selector. If given a String or Symbol, it will be used as the id of the element.

@param [String,Hash] sel id or selector @return [WebDriver::Element]

Examples:

driver['someElementId']    #=> #<WebDriver::Element:0x1011c3b88>
driver[:tag_name => 'div'] #=> #<WebDriver::Element:0x1011c3b88>
# File lib/selenium/webdriver/common/driver.rb, line 292
def [](sel)
  sel = {id: sel} if sel.is_a?(String) || sel.is_a?(Symbol)

  find_element sel
end
action(**opts) click to toggle source

@return [ActionBuilder] @see ActionBuilder

# File lib/selenium/webdriver/common/driver.rb, line 126
def action(**opts)
  bridge.action(**opts)
end
add_virtual_authenticator(options) click to toggle source

@return [VirtualAuthenticator] @see VirtualAuthenticator

# File lib/selenium/webdriver/common/driver.rb, line 256
def add_virtual_authenticator(options)
  bridge.add_virtual_authenticator(options)
end
browser() click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 298
def browser
  bridge&.browser
end
capabilities() click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 302
def capabilities
  bridge.capabilities
end
close() click to toggle source

Close the current window, or the browser if no windows are left.

# File lib/selenium/webdriver/common/driver.rb, line 191
def close
  bridge.close
end
current_url() click to toggle source

Get the URL of the current page

@return [String]

# File lib/selenium/webdriver/common/driver.rb, line 152
def current_url
  bridge.url
end
execute_async_script(script, *args) click to toggle source

Execute an asynchronous piece of JavaScript in the context of the currently selected frame or window. Unlike executing execute_script (synchronous JavaScript), scripts executed with this method must explicitly signal they are finished by invoking the provided callback. This callback is always injected into the executed function as the last argument.

@param [String] script

JavaScript source to execute

@param [WebDriver::Element,Integer, Float, Boolean, NilClass, String, Array] args

Arguments to the script. May be empty.

@return [WebDriver::Element,Integer,Float,Boolean,NilClass,String,Array]

# File lib/selenium/webdriver/common/driver.rb, line 247
def execute_async_script(script, *args)
  bridge.execute_async_script(script, *args)
end
execute_script(script, *args) click to toggle source

Execute the given JavaScript

@param [String] script

JavaScript source to execute

@param [WebDriver::Element, Integer, Float, Boolean, NilClass, String, Array] args

Arguments will be available in the given script in the 'arguments' pseudo-array.

@return [WebDriver::Element,Integer,Float,Boolean,NilClass,String,Array]

The value returned from the script.
# File lib/selenium/webdriver/common/driver.rb, line 228
def execute_script(script, *args)
  bridge.execute_script(script, *args)
end
Also aliased as: script
get(url) click to toggle source

Opens the specified URL in the browser.

# File lib/selenium/webdriver/common/driver.rb, line 142
def get(url)
  navigate.to(url)
end
inspect() click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 79
def inspect
  format '#<%<class>s:0x%<hash>x browser=%<browser>s>', class: self.class, hash: hash * 2,
                                                        browser: bridge.browser.inspect
end
keyboard() click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 134
def keyboard
  bridge.keyboard
end
manage() click to toggle source

@return [Manager] @see Manager

# File lib/selenium/webdriver/common/driver.rb, line 117
def manage
  bridge.manage
end
mouse() click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 130
def mouse
  bridge.mouse
end
navigate() click to toggle source

@return [Navigation] @see Navigation

page_source() click to toggle source

Get the source of the current page

@return [String]

# File lib/selenium/webdriver/common/driver.rb, line 172
def page_source
  bridge.page_source
end
quit() click to toggle source

Quit the browser

# File lib/selenium/webdriver/common/driver.rb, line 180
def quit
  bridge.quit
ensure
  @service&.stop
  @devtools&.close
end
ref() click to toggle source

@api private @see SearchContext

# File lib/selenium/webdriver/common/driver.rb, line 311
def ref
  [:driver, nil]
end
script(script, *args)

driver.script(‘function() { … };’)

Alias for: execute_script
status() click to toggle source

information about whether a remote end is in a state in which it can create new sessions, and may include additional meta information.

@return [Hash]

# File lib/selenium/webdriver/common/driver.rb, line 90
def status
  @bridge.status
end
switch_to() click to toggle source

@return [TargetLocator] @see TargetLocator

# File lib/selenium/webdriver/common/driver.rb, line 108
def switch_to
  @switch_to ||= WebDriver::TargetLocator.new(bridge)
end
title() click to toggle source

Get the title of the current page

@return [String]

# File lib/selenium/webdriver/common/driver.rb, line 162
def title
  bridge.title
end
window_handle() click to toggle source

Get the current window handle

@return [String]

# File lib/selenium/webdriver/common/driver.rb, line 212
def window_handle
  bridge.window_handle
end
window_handles() click to toggle source

Get the window handles of open browser windows.

@return [Array] @see TargetLocator#window

# File lib/selenium/webdriver/common/driver.rb, line 202
def window_handles
  bridge.window_handles
end

Private Instance Methods

add_extensions(browser) click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 349
def add_extensions(browser)
  extensions = case browser
               when :chrome, :msedge
                 Chrome::Driver::EXTENSIONS
               when :firefox
                 Firefox::Driver::EXTENSIONS
               when :safari, :safari_technology_preview
                 Safari::Driver::EXTENSIONS
               else
                 []
               end
  extensions.each { |extension| extend extension }
end
create_bridge(capabilities: nil, options: nil, url: nil, service: nil, http_client: nil) click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 319
def create_bridge(capabilities: nil, options: nil, url: nil, service: nil, http_client: nil)
  Remote::Bridge.new(http_client: http_client,
                     url: url || service_url(service)).tap do |bridge|
    generated_caps = options ? options.as_json : generate_capabilities(capabilities)
    bridge.create_session(generated_caps)
  end
end
generate_capabilities(capabilities) click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 327
def generate_capabilities(capabilities)
  Array(capabilities).map { |cap|
    if cap.is_a? Symbol
      cap = Remote::Capabilities.send(cap)
    elsif !cap.respond_to? :as_json
      msg = ":capabilities parameter only accepts objects responding to #as_json which #{cap.class} does not"
      raise ArgumentError, msg
    end
    cap.as_json
  }.inject(:merge) || Remote::Capabilities.send(browser || :new)
end
screenshot() click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 345
def screenshot
  bridge.screenshot
end
service_url(service) click to toggle source
# File lib/selenium/webdriver/common/driver.rb, line 339
def service_url(service)
  service ||= Service.send(browser)
  @service = service.launch
  @service.uri
end