Class: Selenium::WebDriver::Driver

Inherits:
Object
  • Object
show all
Includes:
SearchContext, TakesScreenshot
Defined in:
lib/selenium/webdriver/common/driver.rb

Overview

The main class through which you control the browser.

Constant Summary

Constants included from SearchContext

SearchContext::FINDERS

Class Method Summary collapse

Instance Method Summary collapse

Methods included from TakesScreenshot

#save_screenshot, #screenshot_as

Methods included from SearchContext

#find_element, #find_elements

Constructor Details

#initialize(bridge: nil, listener: nil, **opts) ⇒ Driver

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.

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



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

def initialize(bridge: nil, listener: nil, **opts)
  @devtools = nil
  @bidi = nil
  bridge ||= create_bridge(**opts)
  add_extensions(bridge.browser)
  @bridge = listener ? Support::EventFiringBridge.new(bridge, listener) : bridge
end

Class Method Details

.for(browser, opts = {}) ⇒ Driver

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.

Returns:

See Also:



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/selenium/webdriver/common/driver.rb', line 44

def for(browser, opts = {})
  case browser
  when :chrome, :chrome_headless_shell
    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, :microsoftedge, :msedge
    Edge::Driver.new(**opts)
  when :remote
    Remote::Driver.new(**opts)
  else
    raise ArgumentError, "unknown driver: #{browser.inspect}"
  end
end

Instance Method Details

#[](sel) ⇒ WebDriver::Element

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

Examples:

driver['someElementId']    #=> #<WebDriver::Element:0x1011c3b88>
driver[:tag_name => 'div'] #=> #<WebDriver::Element:0x1011c3b88>

Parameters:

  • sel (String, Hash)

    id or selector

Returns:



288
289
290
291
292
# File 'lib/selenium/webdriver/common/driver.rb', line 288

def [](sel)
  sel = {id: sel} if sel.is_a?(String) || sel.is_a?(Symbol)

  find_element sel
end

#action(**opts) ⇒ ActionBuilder

Returns:

See Also:



126
127
128
# File 'lib/selenium/webdriver/common/driver.rb', line 126

def action(**opts)
  bridge.action(**opts)
end

#add_virtual_authenticator(options) ⇒ VirtualAuthenticator



252
253
254
# File 'lib/selenium/webdriver/common/driver.rb', line 252

def add_virtual_authenticator(options)
  bridge.add_virtual_authenticator(options)
end

#browserObject



294
295
296
# File 'lib/selenium/webdriver/common/driver.rb', line 294

def browser
  bridge.browser
end

#capabilitiesObject



298
299
300
# File 'lib/selenium/webdriver/common/driver.rb', line 298

def capabilities
  bridge.capabilities
end

#closeObject

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



184
185
186
187
188
189
# File 'lib/selenium/webdriver/common/driver.rb', line 184

def close
  # If no top-level browsing contexts are open after calling close,
  # it indicates that the WebDriver session is closed.
  # If the WebDriver session is closed, the BiDi session also needs to be closed.
  bridge.close.tap { |handles| @bidi&.close if handles&.empty? }
end

#current_urlString

Get the URL of the current page

Returns:

  • (String)


144
145
146
# File 'lib/selenium/webdriver/common/driver.rb', line 144

def current_url
  bridge.url
end

#execute_async_script(script, *args) ⇒ WebDriver::Element, ...

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.

Parameters:

  • script (String)

    JavaScript source to execute

  • args (WebDriver::Element, Integer, Float, Boolean, NilClass, String, Array)

    Arguments to the script. May be empty.

Returns:



243
244
245
# File 'lib/selenium/webdriver/common/driver.rb', line 243

def execute_async_script(script, *args)
  bridge.execute_async_script(script, *args)
end

#execute_script(script, *args) ⇒ WebDriver::Element, ... Also known as: script

Execute the given JavaScript

Parameters:

  • script (String)

    JavaScript source to execute

  • args (WebDriver::Element, Integer, Float, Boolean, NilClass, String, Array)

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

Returns:

  • (WebDriver::Element, Integer, Float, Boolean, NilClass, String, Array)

    The value returned from the script.



224
225
226
# File 'lib/selenium/webdriver/common/driver.rb', line 224

def execute_script(script, *args)
  bridge.execute_script(script, *args)
end

#get(url) ⇒ Object

Opens the specified URL in the browser.



134
135
136
# File 'lib/selenium/webdriver/common/driver.rb', line 134

def get(url)
  navigate.to(url)
end

#inspectObject



79
80
81
82
# 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

#manageManager

Returns:

See Also:



117
118
119
# File 'lib/selenium/webdriver/common/driver.rb', line 117

def manage
  bridge.manage
end

Returns:

See Also:



99
100
101
# File 'lib/selenium/webdriver/common/driver.rb', line 99

def navigate
  @navigate ||= WebDriver::Navigation.new(bridge)
end

#page_sourceString

Get the source of the current page

Returns:

  • (String)


164
165
166
# File 'lib/selenium/webdriver/common/driver.rb', line 164

def page_source
  bridge.page_source
end

#quitObject

Quit the browser



172
173
174
175
176
177
178
# File 'lib/selenium/webdriver/common/driver.rb', line 172

def quit
  bridge.quit
ensure
  @service_manager&.stop
  @devtools&.close
  @bidi&.close
end

#refObject

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.

See Also:



307
308
309
# File 'lib/selenium/webdriver/common/driver.rb', line 307

def ref
  [:driver, nil]
end

#statusHash

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

Returns:

  • (Hash)


90
91
92
# File 'lib/selenium/webdriver/common/driver.rb', line 90

def status
  @bridge.status
end

#switch_toTargetLocator

Returns:

See Also:



108
109
110
# File 'lib/selenium/webdriver/common/driver.rb', line 108

def switch_to
  @switch_to ||= WebDriver::TargetLocator.new(bridge)
end

#titleString

Get the title of the current page

Returns:

  • (String)


154
155
156
# File 'lib/selenium/webdriver/common/driver.rb', line 154

def title
  bridge.title
end

#window_handleString

Get the current window handle

Returns:

  • (String)


208
209
210
# File 'lib/selenium/webdriver/common/driver.rb', line 208

def window_handle
  bridge.window_handle
end

#window_handlesArray

Get the window handles of open browser windows.

Returns:

  • (Array)

See Also:



198
199
200
# File 'lib/selenium/webdriver/common/driver.rb', line 198

def window_handles
  bridge.window_handles
end