Class: Selenium::WebDriver::Remote::W3CBridge Private

Inherits:
Object
  • Object
show all
Includes:
Atoms, BridgeHelper
Defined in:
lib/selenium/webdriver/remote/w3c_bridge.rb,
lib/selenium/webdriver/remote/w3c_commands.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Low level bridge to the remote server, through which the rest of the API works.

Direct Known Subclasses

Edge::Bridge, Firefox::W3CBridge

Constant Summary collapse

QUIT_ERRORS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

[IOError].freeze
COMMANDS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

http://www.w3.org/TR/2015/WD-webdriver-20150918/#list-of-endpoints

{

    #
    # session handling
    #

    new_session: [:post, 'session'.freeze],
    delete_session: [:delete, 'session/:session_id'.freeze],

    #
    # basic driver
    #

    get: [:post, 'session/:session_id/url'.freeze],
    get_current_url: [:get, 'session/:session_id/url'.freeze],
    back: [:post, 'session/:session_id/back'.freeze],
    forward: [:post, 'session/:session_id/forward'.freeze],
    refresh: [:post, 'session/:session_id/refresh'.freeze],
    get_title: [:get, 'session/:session_id/title'.freeze],

    #
    # window and Frame handling
    #

    get_window_handle: [:get, 'session/:session_id/window'.freeze],
    close_window: [:delete, 'session/:session_id/window'.freeze],
    switch_to_window: [:post, 'session/:session_id/window'.freeze],
    get_window_handles: [:get, 'session/:session_id/window/handles'.freeze],
    fullscreen_window: [:post, 'session/:session_id/window/fullscreen'.freeze],
    minimize_window: [:post, 'session/:session_id/window/minimize'.freeze],
    maximize_window: [:post, 'session/:session_id/window/maximize'.freeze],
    set_window_size: [:post, 'session/:session_id/window/size'.freeze],
    get_window_size: [:get, 'session/:session_id/window/size'.freeze],
    set_window_position: [:post, 'session/:session_id/window/position'.freeze],
    get_window_position: [:get, 'session/:session_id/window/position'.freeze],
    set_window_rect: [:post, 'session/:session_id/window/rect'.freeze],
    get_window_rect: [:get, 'session/:session_id/window/rect'.freeze],
    switch_to_frame: [:post, 'session/:session_id/frame'.freeze],
    switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'.freeze],

    #
    # element
    #

    find_element: [:post, 'session/:session_id/element'.freeze],
    find_elements: [:post, 'session/:session_id/elements'.freeze],
    find_child_element: [:post, 'session/:session_id/element/:id/element'.freeze],
    find_child_elements: [:post, 'session/:session_id/element/:id/elements'.freeze],
    get_active_element: [:get, 'session/:session_id/element/active'.freeze],
    is_element_selected: [:get, 'session/:session_id/element/:id/selected'.freeze],
    get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'.freeze],
    get_element_property: [:get, 'session/:session_id/element/:id/property/:name'.freeze],
    get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'.freeze],
    get_element_text: [:get, 'session/:session_id/element/:id/text'.freeze],
    get_element_tag_name: [:get, 'session/:session_id/element/:id/name'.freeze],
    get_element_rect: [:get, 'session/:session_id/element/:id/rect'.freeze],
    is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'.freeze],

    #
    # document handling
    #

    get_page_source: [:get, '/session/:session_id/source'.freeze],
    execute_script: [:post, 'session/:session_id/execute/sync'.freeze],
    execute_async_script: [:post, 'session/:session_id/execute/async'.freeze],

    #
    # cookies
    #

    get_all_cookies: [:get, 'session/:session_id/cookie'.freeze],
    get_cookie: [:get, 'session/:session_id/cookie/:name'.freeze],
    add_cookie: [:post, 'session/:session_id/cookie'.freeze],
    delete_cookie: [:delete, 'session/:session_id/cookie/:name'.freeze],
    delete_all_cookies: [:delete, 'session/:session_id/cookie'.freeze],

    #
    # timeouts
    #

    set_timeout: [:post, 'session/:session_id/timeouts'.freeze],

    #
    # actions
    #

    actions: [:post, 'session/:session_id/actions'.freeze],
    release_actions: [:delete, 'session/:session_id/actions'.freeze],

    #
    # Element Operations
    #

    element_click: [:post, 'session/:session_id/element/:id/click'.freeze],
    element_tap: [:post, 'session/:session_id/element/:id/tap'.freeze],
    element_clear: [:post, 'session/:session_id/element/:id/clear'.freeze],
    element_send_keys: [:post, 'session/:session_id/element/:id/value'.freeze],

    #
    # alerts
    #

    dismiss_alert: [:post, 'session/:session_id/alert/dismiss'.freeze],
    accept_alert: [:post, 'session/:session_id/alert/accept'.freeze],
    get_alert_text: [:get, 'session/:session_id/alert/text'.freeze],
    send_alert_text: [:post, 'session/:session_id/alert/text'.freeze],

    #
    # screenshot
    #

    take_screenshot: [:get, 'session/:session_id/screenshot'.freeze],
    take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'.freeze]
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from BridgeHelper

#element_id_from, #parse_cookie_string, #unwrap_script_result

Constructor Details

#initialize(opts = {}) ⇒ W3CBridge

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.

Initializes the bridge with the given server URL

Parameters:

  • opts (Hash) (defaults to: {}) —

    options for the driver

Options Hash (opts):

  • :url (String) —

    url for the remote server

  • :port (Integer) —

    port number for the remote server

  • :http_client (Object) —

    an HTTP client instance that implements the same protocol as Http::Default

  • :desired_capabilities (Capabilities) —

    an instance of Remote::Capabilities describing the capabilities you want



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 47

def initialize(opts = {})

  opts = opts.dup

  if opts.key?(:port)
    WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
    [DEPRECATION] `:port` is deprecated. Use full url desired.
    DEPRECATE
  end
  port = opts.delete(:port) || 4444

  http_client = opts.delete(:http_client) { Http::Default.new }
  desired_capabilities = opts.delete(:desired_capabilities) { W3CCapabilities.firefox }
  url = opts.delete(:url) { "http://#{Platform.localhost}:#{port}/wd/hub" }

  desired_capabilities = W3CCapabilities.send(desired_capabilities) if desired_capabilities.is_a? Symbol

  desired_capabilities[:marionette] = opts.delete(:marionette) unless opts[:marionette].nil?

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

  uri = url.is_a?(URI) ? url : URI.parse(url)
  uri.path += '/' unless uri.path =~ %r{\/$}

  http_client.server_url = uri

  @http = http_client
  @capabilities = create_session(desired_capabilities)
  @file_detector = nil
end

Instance Attribute Details

#capabilities ⇒ Object (readonly)

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.



36
37
38
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 36

def capabilities
  @capabilities
end

#context ⇒ Object

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.



35
36
37
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 35

def context
  @context
end

#file_detector ⇒ Object

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.



35
36
37
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 35

def file_detector
  @file_detector
end

#http ⇒ Object

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.



35
36
37
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 35

def http
  @http
end

Instance Method Details

#accept_alert ⇒ Object

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.

alerts



146
147
148
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 146

def accept_alert
  execute :accept_alert
end

#action(async = false) ⇒ Object Also known as: actions

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.

actions



400
401
402
403
404
405
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 400

def action(async = false)
  W3CActionBuilder.new self,
                       Interactions.pointer(:mouse, name: 'mouse'),
                       Interactions.key('keyboard'),
                       async
end

#active_element ⇒ Object Also known as: switch_to_active_element

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.

finding elements



570
571
572
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 570

def active_element
  Element.new self, element_id_from(execute(:get_active_element))
end

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.



376
377
378
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 376

def add_cookie(cookie)
  execute :add_cookie, {}, {cookie: cookie}
end

#alert=(keys) ⇒ Object

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.



154
155
156
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 154

def alert=(keys)
  execute :send_alert_text, {}, {value: keys.split(//), text: keys}
end

#alert_text ⇒ Object

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.



158
159
160
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 158

def alert_text
  execute :get_alert_text
end

#browser ⇒ Object

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.



80
81
82
83
84
85
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 80

def browser
  @browser ||= (
  name = @capabilities.browser_name
  name ? name.tr(' ', '_').to_sym : 'unknown'
  )
end

#clear_element(element) ⇒ Object

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.



435
436
437
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 435

def clear_element(element)
  execute :element_clear, id: element
end

#clear_local_storage ⇒ Object

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.



306
307
308
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 306

def clear_local_storage
  execute_script('localStorage.clear()')
end

#clear_session_storage ⇒ Object

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.



330
331
332
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 330

def clear_session_storage
  execute_script('sessionStorage.clear()')
end

#click_element(element) ⇒ Object

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.



424
425
426
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 424

def click_element(element)
  execute :element_click, id: element
end

#close ⇒ Object

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.



213
214
215
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 213

def close
  execute :close_window
end

#commands(command) ⇒ Object

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.



96
97
98
99
100
101
102
103
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 96

def commands(command)
  case command
  when :status, :is_element_displayed
    Bridge::COMMANDS[command]
  else
    COMMANDS[command]
  end
end

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.



384
385
386
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 384

def cookie(name)
  execute :get_cookie, name: name
end

#cookies ⇒ Object

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.



388
389
390
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 388

def cookies
  execute :get_all_cookies
end

#create_session(desired_capabilities) ⇒ Object

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.



113
114
115
116
117
118
119
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 113

def create_session(desired_capabilities)
  resp = execute :new_session, {}, {desiredCapabilities: desired_capabilities}
  @session_id = resp['sessionId']
  return W3CCapabilities.json_create(resp['capabilities'] || resp['value']) if @session_id

  raise Error::WebDriverError, 'no sessionId in returned payload'
end

#delete_all_cookies ⇒ Object

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.



392
393
394
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 392

def delete_all_cookies
  execute :delete_all_cookies
end

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.



380
381
382
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 380

def delete_cookie(name)
  execute :delete_cookie, name: name
end

#dismiss_alert ⇒ Object

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.



150
151
152
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 150

def dismiss_alert
  execute :dismiss_alert
end

#drag_element(element, right_by, down_by) ⇒ Object

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.



446
447
448
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 446

def drag_element(element, right_by, down_by)
  execute :drag_element, {id: element}, {x: right_by, y: down_by}
end

#driver_extensions ⇒ Object

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.



87
88
89
90
91
92
93
94
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 87

def driver_extensions
  [DriverExtensions::UploadsFiles,
   DriverExtensions::TakesScreenshot,
   DriverExtensions::HasSessionId,
   DriverExtensions::Rotatable,
   DriverExtensions::HasRemoteStatus,
   DriverExtensions::HasWebStorage]
end

#element_attribute(element, name) ⇒ Object

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.



511
512
513
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 511

def element_attribute(element, name)
  execute_atom :getAttribute, element, name
end

#element_displayed?(element) ⇒ Boolean

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:

  • (Boolean)


558
559
560
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 558

def element_displayed?(element)
  execute :is_element_displayed, id: element
end

#element_enabled?(element) ⇒ Boolean

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:

  • (Boolean)


550
551
552
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 550

def element_enabled?(element)
  execute :is_element_enabled, id: element
end

#element_location(element) ⇒ Object

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.



527
528
529
530
531
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 527

def element_location(element)
  data = execute :get_element_rect, id: element

  Point.new data['x'], data['y']
end

#element_location_once_scrolled_into_view(element) ⇒ Object

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.



539
540
541
542
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 539

def element_location_once_scrolled_into_view(element)
  send_keys_to_element(element, [''])
  element_location(element)
end

#element_property(element, name) ⇒ Object

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.



515
516
517
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 515

def element_property(element, name)
  execute :get_element_property, id: element.ref, name: name
end

#element_rect(element) ⇒ Object

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.



533
534
535
536
537
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 533

def element_rect(element)
  data = execute :get_element_rect, id: element

  Rectangle.new data['x'], data['y'], data['width'], data['height']
end

#element_selected?(element) ⇒ Boolean

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:

  • (Boolean)


554
555
556
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 554

def element_selected?(element)
  execute :is_element_selected, id: element
end

#element_size(element) ⇒ Object

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.



544
545
546
547
548
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 544

def element_size(element)
  data = execute :get_element_rect, id: element

  Dimension.new data['width'], data['height']
end

#element_tag_name(element) ⇒ Object

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.

element properties



507
508
509
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 507

def element_tag_name(element)
  execute :get_element_tag_name, id: element
end

#element_text(element) ⇒ Object

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.



523
524
525
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 523

def element_text(element)
  execute :get_element_text, id: element
end

#element_value(element) ⇒ Object

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.



519
520
521
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 519

def element_value(element)
  element_property element, 'value'
end

#element_value_of_css_property(element, prop) ⇒ Object

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.



562
563
564
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 562

def element_value_of_css_property(element, prop)
  execute :get_element_css_value, id: element, property_name: prop
end

#execute_async_script(script, *args) ⇒ Object

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.



363
364
365
366
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 363

def execute_async_script(script, *args)
  result = execute :execute_async_script, {}, {script: script, args: args}
  unwrap_script_result result
end

#execute_script(script, *args) ⇒ Object

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.

javascript execution



358
359
360
361
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 358

def execute_script(script, *args)
  result = execute :execute_script, {}, {script: script, args: args}
  unwrap_script_result result
end

#find_element_by(how, what, parent = nil) ⇒ Object

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.



576
577
578
579
580
581
582
583
584
585
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 576

def find_element_by(how, what, parent = nil)
  how, what = convert_locators(how, what)

  id = if parent
         execute :find_child_element, {id: parent}, {using: how, value: what}
       else
         execute :find_element, {}, {using: how, value: what}
       end
  Element.new self, element_id_from(id)
end

#find_elements_by(how, what, parent = nil) ⇒ Object

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.



587
588
589
590
591
592
593
594
595
596
597
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 587

def find_elements_by(how, what, parent = nil)
  how, what = convert_locators(how, what)

  ids = if parent
          execute :find_child_elements, {id: parent}, {using: how, value: what}
        else
          execute :find_elements, {}, {using: how, value: what}
        end

  ids.map { |id| Element.new self, element_id_from(id) }
end

#full_screen_window ⇒ Object

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.



260
261
262
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 260

def full_screen_window
  execute :fullscreen_window
end

#get(url) ⇒ Object

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.



125
126
127
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 125

def get(url)
  execute :get, {}, {url: url}
end

#go_back ⇒ Object

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.

navigation



166
167
168
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 166

def go_back
  execute :back
end

#go_forward ⇒ Object

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.



170
171
172
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 170

def go_forward
  execute :forward
end

#implicit_wait_timeout=(milliseconds) ⇒ Object

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.



129
130
131
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 129

def implicit_wait_timeout=(milliseconds)
  timeout('implicit', milliseconds)
end

#keyboard ⇒ Object

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.



412
413
414
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 412

def keyboard
  raise Error::UnsupportedOperationError, '#keyboard is no longer supported, use #action instead'
end

#local_storage_item(key, value = nil) ⇒ Object

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.

HTML 5



290
291
292
293
294
295
296
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 290

def local_storage_item(key, value = nil)
  if value
    execute_script("localStorage.setItem('#{key}', '#{value}')")
  else
    execute_script("return localStorage.getItem('#{key}')")
  end
end

#local_storage_keys ⇒ Object

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.



302
303
304
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 302

def local_storage_keys
  execute_script('return Object.keys(localStorage)')
end

#local_storage_size ⇒ Object

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.



310
311
312
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 310

def local_storage_size
  execute_script('return localStorage.length')
end

#location ⇒ Object

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.



338
339
340
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 338

def location
  raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting location'
end

#maximize_window(handle = :current) ⇒ Object

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.



253
254
255
256
257
258
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 253

def maximize_window(handle = :current)
  unless handle == :current
    raise Error::UnsupportedOperationError, 'Switch to desired window before changing its size'
  end
  execute :maximize_window
end

#minimize_window ⇒ Object

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.



249
250
251
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 249

def minimize_window
  execute :minimize_window
end

#mouse ⇒ Object

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.



408
409
410
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 408

def mouse
  raise Error::UnsupportedOperationError, '#mouse is no longer supported, use #action instead'
end

#network_connection ⇒ Object

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.



346
347
348
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 346

def network_connection
  raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting network connection'
end

#network_connection=(_type) ⇒ Object

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.



350
351
352
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 350

def network_connection=(_type)
  raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting network connection'
end

#options ⇒ Object

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.

cookies



372
373
374
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 372

def options
  @options ||= WebDriver::W3COptions.new(self)
end

#page_source ⇒ Object

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.



182
183
184
185
186
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 182

def page_source
  execute_script('var source = document.documentElement.outerHTML;' \
                    'if (!source) { source = new XMLSerializer().serializeToString(document); }' \
                    'return source;')
end

#quit ⇒ Object

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.



207
208
209
210
211
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 207

def quit
  execute :delete_session
  http.close
rescue *QUIT_ERRORS
end

#refresh ⇒ Object

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.



217
218
219
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 217

def refresh
  execute :refresh
end

#release_actions ⇒ Object

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.



420
421
422
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 420

def release_actions
  execute :release_actions
end

#remove_local_storage_item(key) ⇒ Object

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.



298
299
300
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 298

def remove_local_storage_item(key)
  execute_script("localStorage.removeItem('#{key}')")
end

#remove_session_storage_item(key) ⇒ Object

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.



322
323
324
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 322

def remove_session_storage_item(key)
  execute_script("sessionStorage.removeItem('#{key}')")
end

#reposition_window(x, y) ⇒ Object

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.



264
265
266
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 264

def reposition_window(x, y)
  execute :set_window_rect, {}, {x: x, y: y}
end

#resize_window(width, height, handle = :current) ⇒ Object

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.



233
234
235
236
237
238
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 233

def resize_window(width, height, handle = :current)
  unless handle == :current
    raise Error::WebDriverError, 'Switch to desired window before changing its size'
  end
  execute :set_window_rect, {}, {width: width, height: height}
end

#screen_orientation ⇒ Object

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.



499
500
501
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 499

def screen_orientation
  execute :get_screen_orientation
end

#screen_orientation=(orientation) ⇒ Object

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.



495
496
497
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 495

def screen_orientation=(orientation)
  execute :set_screen_orientation, {}, {orientation: orientation}
end

#screenshot ⇒ Object

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.



282
283
284
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 282

def screenshot
  execute :take_screenshot
end

#script_timeout=(milliseconds) ⇒ Object

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.



133
134
135
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 133

def script_timeout=(milliseconds)
  timeout('script', milliseconds)
end

#send_actions(data) ⇒ Object

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.



416
417
418
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 416

def send_actions(data)
  execute :actions, {}, {actions: data}
end

#send_keys_to_element(element, keys) ⇒ Object

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.

TODO: - Implement file verification



429
430
431
432
433
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 429

def send_keys_to_element(element, keys)
  # Keep .split(//) for backward compatibility for now
  text = keys.join('')
  execute :element_send_keys, {id: element}, {value: text.split(//), text: text}
end

#session_id ⇒ Object

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 the current session ID.



109
110
111
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 109

def session_id
  @session_id || raise(Error::WebDriverError, 'no current session exists')
end

#session_storage_item(key, value = nil) ⇒ Object

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.



314
315
316
317
318
319
320
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 314

def session_storage_item(key, value = nil)
  if value
    execute_script("sessionStorage.setItem('#{key}', '#{value}')")
  else
    execute_script("return sessionStorage.getItem('#{key}')")
  end
end

#session_storage_keys ⇒ Object

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.



326
327
328
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 326

def session_storage_keys
  execute_script('return Object.keys(sessionStorage)')
end

#session_storage_size ⇒ Object

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.



334
335
336
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 334

def session_storage_size
  execute_script('return sessionStorage.length')
end

#set_location(_lat, _lon, _alt) ⇒ Object

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.



342
343
344
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 342

def set_location(_lat, _lon, _alt)
  raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting location'
end

#set_window_rect(x: nil, y: nil, width: nil, height: nil) ⇒ Object

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.



273
274
275
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 273

def set_window_rect(x: nil, y: nil, width: nil, height: nil)
  execute :set_window_rect, {}, {x: x, y: y, width: width, height: height}
end

#status ⇒ Object

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.



121
122
123
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 121

def status
  execute :status
end

#submit_element(element) ⇒ Object

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.



439
440
441
442
443
444
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 439

def submit_element(element)
  form = find_element_by('xpath', "./ancestor-or-self::form", element)
  execute_script("var e = arguments[0].ownerDocument.createEvent('Event');" \
                    "e.initEvent('submit', true, true);" \
                    'if (arguments[0].dispatchEvent(e)) { arguments[0].submit() }', form.as_json)
end

#switch_to_default_content ⇒ Object

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.



201
202
203
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 201

def switch_to_default_content
  switch_to_frame nil
end

#switch_to_frame(id) ⇒ Object

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.



192
193
194
195
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 192

def switch_to_frame(id)
  id = find_element_by('id', id) if id.is_a? String
  execute :switch_to_frame, {}, {id: id}
end

#switch_to_parent_frame ⇒ Object

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.



197
198
199
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 197

def switch_to_parent_frame
  execute :switch_to_parent_frame
end

#switch_to_window(name) ⇒ Object

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.



188
189
190
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 188

def switch_to_window(name)
  execute :switch_to_window, {}, {handle: name}
end

#timeout(type, milliseconds) ⇒ Object

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.



137
138
139
140
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 137

def timeout(type, milliseconds)
  type = 'pageLoad' if type == 'page load'
  execute :set_timeout, {}, {type => milliseconds}
end

#title ⇒ Object

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.



178
179
180
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 178

def title
  execute :get_title
end

#touch_double_tap(element) ⇒ Object

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.



454
455
456
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 454

def touch_double_tap(element)
  execute :touch_double_tap, {}, {element: element}
end

#touch_down(x, y) ⇒ Object

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.



462
463
464
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 462

def touch_down(x, y)
  execute :touch_down, {}, {x: x, y: y}
end

#touch_element_flick(element, right_by, down_by, speed) ⇒ Object

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.



488
489
490
491
492
493
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 488

def touch_element_flick(element, right_by, down_by, speed)
  execute :touch_flick, {}, {element: element,
                            xoffset: right_by,
                            yoffset: down_by,
                            speed: speed}
end

#touch_flick(xspeed, yspeed) ⇒ Object

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.



484
485
486
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 484

def touch_flick(xspeed, yspeed)
  execute :touch_flick, {}, {xspeed: xspeed, yspeed: yspeed}
end

#touch_long_press(element) ⇒ Object

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.



458
459
460
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 458

def touch_long_press(element)
  execute :touch_long_press, {}, {element: element}
end

#touch_move(x, y) ⇒ Object

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.



470
471
472
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 470

def touch_move(x, y)
  execute :touch_move, {}, {x: x, y: y}
end

#touch_scroll(element, x, y) ⇒ Object

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.



474
475
476
477
478
479
480
481
482
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 474

def touch_scroll(element, x, y)
  if element
    execute :touch_scroll, {}, {element: element,
                               xoffset: x,
                               yoffset: y}
  else
    execute :touch_scroll, {}, {xoffset: x, yoffset: y}
  end
end

#touch_single_tap(element) ⇒ Object

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.



450
451
452
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 450

def touch_single_tap(element)
  execute :touch_single_tap, {}, {element: element}
end

#touch_up(x, y) ⇒ Object

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.



466
467
468
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 466

def touch_up(x, y)
  execute :touch_up, {}, {x: x, y: y}
end

#url ⇒ Object

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.



174
175
176
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 174

def url
  execute :get_current_url
end

#window_handle ⇒ Object

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.



229
230
231
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 229

def window_handle
  execute :get_window_handle
end

#window_handles ⇒ Object

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.

window handling



225
226
227
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 225

def window_handles
  execute :get_window_handles
end

#window_position ⇒ Object

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.



268
269
270
271
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 268

def window_position
  data = execute :get_window_rect
  Point.new data['x'], data['y']
end

#window_rect ⇒ Object

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.



277
278
279
280
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 277

def window_rect
  data = execute :get_window_rect
  Rectangle.new data['x'], data['y'], data['width'], data['height']
end

#window_size(handle = :current) ⇒ Object

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.



240
241
242
243
244
245
246
247
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 240

def window_size(handle = :current)
  unless handle == :current
    raise Error::UnsupportedOperationError, 'Switch to desired window before getting its size'
  end
  data = execute :get_window_rect

  Dimension.new data['width'], data['height']
end