Class: Selenium::WebDriver::Remote::W3C::Bridge Private

Inherits:
Bridge
  • Object
show all
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.

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

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.

{

  #
  # 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],

  #
  # server extensions
  #

  upload_file: [:post, 'session/:session_id/se/file'.freeze]
}.freeze

Constants inherited from Bridge

Bridge::PORT

Instance Attribute Summary

Attributes inherited from Bridge

#capabilities, #context, #file_detector, #http

Instance Method Summary collapse

Methods inherited from Bridge

#browser, #create_session, handshake, #session_id

Methods included from BridgeHelper

#element_id_from, #parse_cookie_string, #unwrap_script_result

Constructor Details

#initialize(capabilities, session_id, **opts) ⇒ Bridge

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 a new instance of Bridge.



33
34
35
36
37
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 33

def initialize(capabilities, session_id, **opts)
  @capabilities = capabilities
  @session_id = session_id
  super(opts)
end

Instance Method Details

#accept_alertObject

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



77
78
79
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 77

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



333
334
335
336
337
338
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 333

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

#active_elementObject 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



520
521
522
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 520

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.



309
310
311
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 309

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.



85
86
87
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 85

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

#alert_textObject

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.



89
90
91
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 89

def alert_text
  execute :get_alert_text
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.



385
386
387
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 385

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

#clear_local_storageObject

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.



239
240
241
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 239

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

#clear_session_storageObject

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.



263
264
265
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 263

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.



357
358
359
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 357

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

#closeObject

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.



144
145
146
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 144

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.



43
44
45
46
47
48
49
50
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 43

def commands(command)
  case command
  when :status, :is_element_displayed
    Remote::OSS::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.



317
318
319
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 317

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

#cookiesObject

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.



321
322
323
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 321

def cookies
  execute :get_all_cookies
end

#delete_all_cookiesObject

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.



325
326
327
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 325

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.



313
314
315
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 313

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

#dialectObject

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.



39
40
41
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 39

def dialect
  :w3c
end

#dismiss_alertObject

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.



81
82
83
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 81

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.



396
397
398
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 396

def drag_element(element, right_by, down_by)
  execute :drag_element, {id: element}, {x: right_by, y: down_by}
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.



461
462
463
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 461

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.



508
509
510
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 508

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.



500
501
502
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 500

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.



477
478
479
480
481
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 477

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.



489
490
491
492
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 489

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.



465
466
467
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 465

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.



483
484
485
486
487
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 483

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.



504
505
506
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 504

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.



494
495
496
497
498
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 494

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



457
458
459
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 457

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.



473
474
475
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 473

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.



469
470
471
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 469

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.



512
513
514
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 512

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.



296
297
298
299
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 296

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



291
292
293
294
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 291

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.



526
527
528
529
530
531
532
533
534
535
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 526

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.



537
538
539
540
541
542
543
544
545
546
547
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 537

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_windowObject

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.



191
192
193
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 191

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.



56
57
58
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 56

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

#go_backObject

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



97
98
99
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 97

def go_back
  execute :back
end

#go_forwardObject

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.



101
102
103
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 101

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.



60
61
62
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 60

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

#keyboardObject

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.



345
346
347
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 345

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



223
224
225
226
227
228
229
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 223

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_keysObject

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.



235
236
237
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 235

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

#local_storage_sizeObject

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.



243
244
245
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 243

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

#locationObject

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.



271
272
273
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 271

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.



184
185
186
187
188
189
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 184

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_windowObject

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.



180
181
182
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 180

def minimize_window
  execute :minimize_window
end

#mouseObject

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.



341
342
343
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 341

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

#network_connectionObject

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.



279
280
281
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 279

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.



283
284
285
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 283

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

#optionsObject

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



305
306
307
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 305

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

#page_sourceObject

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
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 113

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

#quitObject

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.



138
139
140
141
142
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 138

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

#refreshObject

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.



148
149
150
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 148

def refresh
  execute :refresh
end

#release_actionsObject

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.



353
354
355
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 353

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.



231
232
233
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 231

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.



255
256
257
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 255

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.



195
196
197
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 195

def reposition_window(x, y)
  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.



164
165
166
167
168
169
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 164

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

#screen_orientationObject

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.



449
450
451
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 449

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.



445
446
447
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 445

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

#screenshotObject

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.



215
216
217
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 215

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.



64
65
66
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 64

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.



349
350
351
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 349

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.



361
362
363
364
365
366
367
368
369
370
371
372
373
374
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 361

def send_keys_to_element(element, keys)
  # TODO: rework file detectors before Selenium 4.0
  if @file_detector
    local_files = keys.first.split("\n").map { |key| @file_detector.call(Array(key)) }.compact
    if local_files.any?
      keys = local_files.map { |local_file| upload(local_file) }
      keys = Array(keys.join("\n"))
    end
  end

  # Keep .split(//) for backward compatibility for now
  text = keys.join('')
  execute :element_send_keys, {id: element}, {value: text.split(//), text: text}
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.



247
248
249
250
251
252
253
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 247

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_keysObject

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.



259
260
261
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 259

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

#session_storage_sizeObject

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.



267
268
269
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 267

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.



275
276
277
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 275

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.



204
205
206
207
208
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 204

def set_window_rect(x: nil, y: nil, width: nil, height: nil)
  params = {x: x, y: y, width: width, height: height}
  params.update(params) { |k, v| Integer(v) unless v.nil? }
  execute :set_window_rect, {}, params
end

#statusObject

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.



52
53
54
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 52

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.



389
390
391
392
393
394
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 389

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_contentObject

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.



132
133
134
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 132

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.



123
124
125
126
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 123

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_frameObject

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.



128
129
130
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 128

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.



119
120
121
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 119

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.



68
69
70
71
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 68

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

#titleObject

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.



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

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.



404
405
406
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 404

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.



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

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.



438
439
440
441
442
443
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 438

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.



434
435
436
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 434

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.



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

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.



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

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.



424
425
426
427
428
429
430
431
432
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 424

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.



400
401
402
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 400

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.



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

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

#upload(local_file) ⇒ 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.



376
377
378
379
380
381
382
383
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 376

def upload(local_file)
  unless File.file?(local_file)
    WebDriver.logger.debug("File detector only works with files. #{local_file.inspect} isn`t a file!")
    raise Error::WebDriverError, "You are trying to work with something that isn't a file."
  end

  execute :upload_file, {}, {file: Zipper.zip_file(local_file)}
end

#urlObject

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.



105
106
107
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 105

def url
  execute :get_current_url
end

#window_handleObject

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.



160
161
162
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 160

def window_handle
  execute :get_window_handle
end

#window_handlesObject

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



156
157
158
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 156

def window_handles
  execute :get_window_handles
end

#window_positionObject

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.



199
200
201
202
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 199

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

#window_rectObject

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.



210
211
212
213
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 210

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.



171
172
173
174
175
176
177
178
# File 'lib/selenium/webdriver/remote/w3c/bridge.rb', line 171

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