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, finders

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.

[View source]

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

def initialize(bridge: nil, listener: nil, **opts)
  @devtools = nil
  bridge ||= create_bridge(**opts)
  @bridge = listener ? Support::EventFiringBridge.new(bridge, listener) : bridge
  add_extensions(@bridge.browser)
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:

[View source]

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:

[View source]

295
296
297
298
299
# File 'lib/selenium/webdriver/common/driver.rb', line 295

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

  find_element sel
end

#action(**opts) ⇒ ActionBuilder

Returns:

See Also:

[View source]

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

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

#add_virtual_authenticator(options) ⇒ VirtualAuthenticator

[View source]

256
257
258
# File 'lib/selenium/webdriver/common/driver.rb', line 256

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

#browserObject

[View source]

301
302
303
# File 'lib/selenium/webdriver/common/driver.rb', line 301

def browser
  bridge.browser
end

#capabilitiesObject

[View source]

305
306
307
# File 'lib/selenium/webdriver/common/driver.rb', line 305

def capabilities
  bridge.capabilities
end

#closeObject

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

[View source]

191
192
193
# File 'lib/selenium/webdriver/common/driver.rb', line 191

def close
  bridge&.close
end

#current_urlString

Get the URL of the current page

Returns:

  • (String)
[View source]

152
153
154
# File 'lib/selenium/webdriver/common/driver.rb', line 152

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:

[View source]

247
248
249
# 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) ⇒ WebDriver::Element, ...

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.

[View source]

228
229
230
# File 'lib/selenium/webdriver/common/driver.rb', line 228

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

#get(url) ⇒ Object

Opens the specified URL in the browser.

[View source]

142
143
144
# File 'lib/selenium/webdriver/common/driver.rb', line 142

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

#inspectObject

[View source]

78
79
80
81
# File 'lib/selenium/webdriver/common/driver.rb', line 78

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:

[View source]

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

def manage
  bridge.manage
end

Returns:

See Also:

[View source]

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

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

#networkNetwork

Returns:

See Also:

[View source]

265
266
267
# File 'lib/selenium/webdriver/common/driver.rb', line 265

def network
  @network ||= WebDriver::Network.new(bridge)
end

#page_sourceString

Get the source of the current page

Returns:

  • (String)
[View source]

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

def page_source
  bridge.page_source
end

#quitObject

Quit the browser

[View source]

180
181
182
183
184
185
# File 'lib/selenium/webdriver/common/driver.rb', line 180

def quit
  bridge.quit
ensure
  @service_manager&.stop
  @devtools&.each_value(&: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:

[View source]

314
315
316
# File 'lib/selenium/webdriver/common/driver.rb', line 314

def ref
  [:driver, nil]
end

#scriptScript

Returns:

See Also:

[View source]

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

def script
  @script ||= WebDriver::Script.new(bridge)
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)
[View source]

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

def status
  @bridge.status
end

#switch_toTargetLocator

Returns:

See Also:

[View source]

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

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

#titleString

Get the title of the current page

Returns:

  • (String)
[View source]

162
163
164
# File 'lib/selenium/webdriver/common/driver.rb', line 162

def title
  bridge.title
end

#window_handleString

Get the current window handle

Returns:

  • (String)
[View source]

212
213
214
# File 'lib/selenium/webdriver/common/driver.rb', line 212

def window_handle
  bridge.window_handle
end

#window_handlesArray

Get the window handles of open browser windows.

Returns:

  • (Array)

See Also:

[View source]

202
203
204
# File 'lib/selenium/webdriver/common/driver.rb', line 202

def window_handles
  bridge.window_handles
end