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) ⇒ 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
# File 'lib/selenium/webdriver/common/driver.rb', line 71

def initialize(bridge: nil, listener: nil, **)
  @devtools = nil
  bridge ||= create_bridge(**)
  @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:



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:



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

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

  find_element sel
end

#actionActionBuilder

Returns:

See Also:



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

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

#add_virtual_authenticator(options) ⇒ VirtualAuthenticator



267
268
269
# File 'lib/selenium/webdriver/common/driver.rb', line 267

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

#bidiBiDi

Returns the WebDriver BiDi connection for this session.

Returns:

Raises:



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

def bidi
  @bridge.bidi
end

#browserObject



312
313
314
# File 'lib/selenium/webdriver/common/driver.rb', line 312

def browser
  bridge.browser
end

#capabilitiesObject



316
317
318
# File 'lib/selenium/webdriver/common/driver.rb', line 316

def capabilities
  bridge.capabilities
end

#closeObject

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



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

def close
  bridge&.close
end

#current_urlString

Get the URL of the current page

Returns:

  • (String)


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

def current_url
  bridge.url
end

#execute_async_script(script) ⇒ 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:



258
259
260
# File 'lib/selenium/webdriver/common/driver.rb', line 258

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

#execute_script(script) ⇒ 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.



239
240
241
# File 'lib/selenium/webdriver/common/driver.rb', line 239

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

#get(url) ⇒ Object

Opens the specified URL in the browser.



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

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

#inspectObject



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:



136
137
138
# File 'lib/selenium/webdriver/common/driver.rb', line 136

def manage
  bridge.manage
end

Returns:

See Also:



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

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

#networkNetwork

Returns:

See Also:



276
277
278
# File 'lib/selenium/webdriver/common/driver.rb', line 276

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

#page_sourceString

Get the source of the current page

Returns:

  • (String)


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

def page_source
  bridge.page_source
end

#quitObject

Quit the browser



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

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:



325
326
327
# File 'lib/selenium/webdriver/common/driver.rb', line 325

def ref
  [:driver, nil]
end

#scriptScript

Returns:

See Also:



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

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)


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

def status
  @bridge.status
end

#switch_toTargetLocator

Returns:

See Also:



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

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

#titleString

Get the title of the current page

Returns:

  • (String)


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

def title
  bridge.title
end

#window_handleString

Get the current window handle

Returns:

  • (String)


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

def window_handle
  bridge.window_handle
end

#window_handlesArray

Get the window handles of open browser windows.

Returns:

  • (Array)

See Also:



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

def window_handles
  bridge.window_handles
end