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

Inherits:
Object
  • Object
show all
Includes:
Atoms
Defined in:
lib/selenium/webdriver/remote/commands.rb,
lib/selenium/webdriver/remote/bridge.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.

w3c.github.io/webdriver/#endpoints

Constant Summary collapse

PORT =
4444
QUIT_ERRORS =
[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.

{
  status: [:get, 'status'],

  #
  # session handling
  #

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

  #
  # basic driver
  #

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

  #
  # window and Frame handling
  #

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

  #
  # element
  #

  find_element: [:post, 'session/:session_id/element'],
  find_elements: [:post, 'session/:session_id/elements'],
  find_child_element: [:post, 'session/:session_id/element/:id/element'],
  find_child_elements: [:post, 'session/:session_id/element/:id/elements'],
  find_shadow_child_element: [:post, 'session/:session_id/shadow/:id/element'],
  find_shadow_child_elements: [:post, 'session/:session_id/shadow/:id/elements'],
  get_active_element: [:get, 'session/:session_id/element/active'],
  get_element_shadow_root: [:get, 'session/:session_id/element/:id/shadow'],
  is_element_selected: [:get, 'session/:session_id/element/:id/selected'],
  get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'],
  get_element_property: [:get, 'session/:session_id/element/:id/property/:name'],
  get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'],
  get_element_aria_role: [:get, 'session/:session_id/element/:id/computedrole'],
  get_element_aria_label: [:get, 'session/:session_id/element/:id/computedlabel'],
  get_element_text: [:get, 'session/:session_id/element/:id/text'],
  get_element_tag_name: [:get, 'session/:session_id/element/:id/name'],
  get_element_rect: [:get, 'session/:session_id/element/:id/rect'],
  is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'],

  #
  # document handling
  #

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

  #
  # cookies
  #

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

  #
  # timeouts
  #

  get_timeouts: [:get, 'session/:session_id/timeouts'],
  set_timeout: [:post, 'session/:session_id/timeouts'],

  #
  # actions
  #

  actions: [:post, 'session/:session_id/actions'],
  release_actions: [:delete, 'session/:session_id/actions'],
  print_page: [:post, 'session/:session_id/print'],

  #
  # Element Operations
  #

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

  #
  # alerts
  #

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

  #
  # screenshot
  #

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

  #
  # server extensions
  #

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url:, http_client: nil) ⇒ 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.

Initializes the bridge with the given server URL

Parameters:

  • :url (String, URI)

    url for the remote server

  • :http_client (Object)

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


38
39
40
41
42
43
44
45
# File 'lib/selenium/webdriver/remote/bridge.rb', line 38

def initialize(url:, http_client: nil)
  uri = url.is_a?(URI) ? url : URI.parse(url)
  uri.path += '/' unless uri.path.end_with?('/')

  @http = http_client || Http::Default.new
  @http.server_url = uri
  @file_detector = nil
end

Instance Attribute Details

#capabilitiesObject (readonly)

Returns the value of attribute capabilities.


29
30
31
# File 'lib/selenium/webdriver/remote/bridge.rb', line 29

def capabilities
  @capabilities
end

#file_detectorObject

Returns the value of attribute file_detector.


28
29
30
# File 'lib/selenium/webdriver/remote/bridge.rb', line 28

def file_detector
  @file_detector
end

#httpObject

Returns the value of attribute http.


28
29
30
# File 'lib/selenium/webdriver/remote/bridge.rb', line 28

def http
  @http
end

Instance Method Details

#accept_alertObject

alerts


112
113
114
# File 'lib/selenium/webdriver/remote/bridge.rb', line 112

def accept_alert
  execute :accept_alert
end

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

actions


372
373
374
375
376
377
# File 'lib/selenium/webdriver/remote/bridge.rb', line 372

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

#active_elementObject Also known as: switch_to_active_element

finding elements


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

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

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

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

#alert=(keys) ⇒ Object


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

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

#alert_textObject


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

def alert_text
  execute :get_alert_text
end

#browserObject


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

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

#clear_element(element) ⇒ Object


428
429
430
# File 'lib/selenium/webdriver/remote/bridge.rb', line 428

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

#clear_local_storageObject


294
295
296
# File 'lib/selenium/webdriver/remote/bridge.rb', line 294

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

#clear_session_storageObject


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

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

#click_element(element) ⇒ Object


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

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

#closeObject


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

def close
  execute :close_window
end

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

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

#cookiesObject


360
361
362
# File 'lib/selenium/webdriver/remote/bridge.rb', line 360

def cookies
  execute :get_all_cookies
end

#create_session(capabilities) ⇒ Object

Creates session.


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/selenium/webdriver/remote/bridge.rb', line 51

def create_session(capabilities)
  response = execute(:new_session, {}, prepare_capabilities_payload(capabilities))

  @session_id = response['sessionId']
  capabilities = response['capabilities']

  raise Error::WebDriverError, 'no sessionId in returned payload' unless @session_id

  @capabilities = Capabilities.json_create(capabilities)

  case @capabilities[:browser_name]
  when 'chrome'
    extend(WebDriver::Chrome::Features)
  when 'firefox'
    extend(WebDriver::Firefox::Features)
  when 'msedge'
    extend(WebDriver::Edge::Features)
  when 'Safari', 'Safari Technology Preview'
    extend(WebDriver::Safari::Features)
  end
end

#delete_all_cookiesObject


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

def delete_all_cookies
  execute :delete_all_cookies
end

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

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

#dismiss_alertObject


116
117
118
# File 'lib/selenium/webdriver/remote/bridge.rb', line 116

def dismiss_alert
  execute :dismiss_alert
end

#element_aria_label(element) ⇒ Object


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

def element_aria_label(element)
  execute :get_element_aria_label, id: element
end

#element_aria_role(element) ⇒ Object


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

def element_aria_role(element)
  execute :get_element_aria_role, id: element
end

#element_attribute(element, name) ⇒ Object


447
448
449
450
# File 'lib/selenium/webdriver/remote/bridge.rb', line 447

def element_attribute(element, name)
  WebDriver.logger.info "Using script for :getAttribute of #{name}"
  execute_atom :getAttribute, element, name
end

#element_displayed?(element) ⇒ Boolean

Returns:

  • (Boolean)

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

def element_displayed?(element)
  WebDriver.logger.info 'Using script for :isDisplayed'
  execute_atom :isDisplayed, element
end

#element_dom_attribute(element, name) ⇒ Object


452
453
454
# File 'lib/selenium/webdriver/remote/bridge.rb', line 452

def element_dom_attribute(element, name)
  execute :get_element_attribute, id: element, name: name
end

#element_enabled?(element) ⇒ Boolean

Returns:

  • (Boolean)

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

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

#element_location(element) ⇒ Object


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

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


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

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

#element_property(element, name) ⇒ Object


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

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

#element_rect(element) ⇒ Object


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

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

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

#element_screenshot(element) ⇒ Object


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

def element_screenshot(element)
  execute :take_element_screenshot, id: element
end

#element_selected?(element) ⇒ Boolean

Returns:

  • (Boolean)

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

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

#element_size(element) ⇒ Object


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

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

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

#element_tag_name(element) ⇒ Object

element properties


443
444
445
# File 'lib/selenium/webdriver/remote/bridge.rb', line 443

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

#element_text(element) ⇒ Object


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

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

#element_value(element) ⇒ Object


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

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

#element_value_of_css_property(element, prop) ⇒ Object


512
513
514
# File 'lib/selenium/webdriver/remote/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


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

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

javascript execution


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

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

#find_element_by(how, what, parent_ref = []) ⇒ Object


526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
# File 'lib/selenium/webdriver/remote/bridge.rb', line 526

def find_element_by(how, what, parent_ref = [])
  how, what = convert_locator(how, what)

  return execute_atom(:findElements, Support::RelativeLocator.new(what).as_json).first if how == 'relative'

  parent_type, parent_id = parent_ref
  id = case parent_type
       when :element
         execute :find_child_element, {id: parent_id}, {using: how, value: what.to_s}
       when :shadow_root
         execute :find_shadow_child_element, {id: parent_id}, {using: how, value: what.to_s}
       else
         execute :find_element, {}, {using: how, value: what.to_s}
       end

  Element.new self, element_id_from(id)
end

#find_elements_by(how, what, parent_ref = []) ⇒ Object


544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
# File 'lib/selenium/webdriver/remote/bridge.rb', line 544

def find_elements_by(how, what, parent_ref = [])
  how, what = convert_locator(how, what)

  return execute_atom :findElements, Support::RelativeLocator.new(what).as_json if how == 'relative'

  parent_type, parent_id = parent_ref
  ids = case parent_type
        when :element
          execute :find_child_elements, {id: parent_id}, {using: how, value: what.to_s}
        when :shadow_root
          execute :find_shadow_child_elements, {id: parent_id}, {using: how, value: what.to_s}
        else
          execute :find_elements, {}, {using: how, value: what.to_s}
        end

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

#full_screen_windowObject


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

def full_screen_window
  execute :fullscreen_window
end

#get(url) ⇒ Object


92
93
94
# File 'lib/selenium/webdriver/remote/bridge.rb', line 92

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

#go_backObject

navigation


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

def go_back
  execute :back
end

#go_forwardObject


136
137
138
# File 'lib/selenium/webdriver/remote/bridge.rb', line 136

def go_forward
  execute :forward
end

#keyboardObject


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

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

#local_storage_item(key, value = nil) ⇒ Object

HTML 5


278
279
280
281
282
283
284
# File 'lib/selenium/webdriver/remote/bridge.rb', line 278

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


290
291
292
# File 'lib/selenium/webdriver/remote/bridge.rb', line 290

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

#local_storage_sizeObject


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

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

#manageObject

cookies


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

def manage
  @manage ||= WebDriver::Manager.new(self)
end

#maximize_window(handle = :current) ⇒ Object


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

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


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

def minimize_window
  execute :minimize_window
end

#mouseObject


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

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

#new_window(type) ⇒ Hash

Create a new top-level browsing context w3c.github.io/webdriver/#new-window

Parameters:

  • type (String)

    Supports two values: 'tab' and 'window'. Use 'tab' if you'd like the new window to share an OS-level window with the current browsing context. Use 'window' otherwise

Returns:

  • (Hash)

    Containing 'handle' with the value of the window handle and 'type' with the value of the created window type


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

def new_window(type)
  execute :new_window, {}, {type: type}
end

#page_sourceObject


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

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

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

def print_page(options = {})
  execute :print_page, {}, {options: options}
end

#quitObject


187
188
189
190
191
# File 'lib/selenium/webdriver/remote/bridge.rb', line 187

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

#refreshObject


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

def refresh
  execute :refresh
end

#release_actionsObject


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

def release_actions
  execute :release_actions
end

#remove_local_storage_item(key) ⇒ Object


286
287
288
# File 'lib/selenium/webdriver/remote/bridge.rb', line 286

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

#remove_session_storage_item(key) ⇒ Object


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

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

#reposition_window(x, y) ⇒ Object


246
247
248
# File 'lib/selenium/webdriver/remote/bridge.rb', line 246

def reposition_window(x, y)
  set_window_rect(x: x, y: y)
end

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


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

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

  set_window_rect(width: width, height: height)
end

#screenshotObject


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

def screenshot
  execute :take_screenshot
end

#send_actions(data) ⇒ Object


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

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

#send_keys_to_element(element, keys) ⇒ Object


404
405
406
407
408
409
410
411
412
413
414
415
416
417
# File 'lib/selenium/webdriver/remote/bridge.rb', line 404

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_idObject

Returns the current session ID.


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

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

#session_storage_item(key, value = nil) ⇒ Object


302
303
304
305
306
307
308
# File 'lib/selenium/webdriver/remote/bridge.rb', line 302

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


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

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

#session_storage_sizeObject


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

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

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


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

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

#shadow_root(element) ⇒ Object


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

def shadow_root(element)
  id = execute :get_element_shadow_root, id: element
  ShadowRoot.new self, shadow_root_id_from(id)
end

#statusObject


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

def status
  execute :status
end

#submit_element(element) ⇒ Object


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

def submit_element(element)
  form = find_element_by('xpath', "./ancestor-or-self::form", [:element, 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


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

def switch_to_default_content
  switch_to_frame nil
end

#switch_to_frame(id) ⇒ Object


172
173
174
175
# File 'lib/selenium/webdriver/remote/bridge.rb', line 172

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


177
178
179
# File 'lib/selenium/webdriver/remote/bridge.rb', line 177

def switch_to_parent_frame
  execute :switch_to_parent_frame
end

#switch_to_window(name) ⇒ Object


168
169
170
# File 'lib/selenium/webdriver/remote/bridge.rb', line 168

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

#timeoutsObject

timeouts


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

def timeouts
  execute :get_timeouts, {}
end

#timeouts=(timeouts) ⇒ Object


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

def timeouts=(timeouts)
  execute :set_timeout, {}, timeouts
end

#titleObject


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

def title
  execute :get_title
end

#upload(local_file) ⇒ Object


419
420
421
422
423
424
425
426
# File 'lib/selenium/webdriver/remote/bridge.rb', line 419

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


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

def url
  execute :get_current_url
end

#window_handleObject


209
210
211
# File 'lib/selenium/webdriver/remote/bridge.rb', line 209

def window_handle
  execute :get_window_handle
end

#window_handlesObject

window handling


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

def window_handles
  execute :get_window_handles
end

#window_positionObject


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

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

#window_rectObject


261
262
263
264
# File 'lib/selenium/webdriver/remote/bridge.rb', line 261

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

#window_size(handle = :current) ⇒ Object


219
220
221
222
223
224
225
226
227
# File 'lib/selenium/webdriver/remote/bridge.rb', line 219

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