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.

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

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

  • url (String)

    url 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



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

def initialize(opts = {})

  opts = opts.dup

  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

#capabilitiesObject (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

#contextObject

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_detectorObject

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

#httpObject

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_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



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

def accept_alert
  execute :accept_alert
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



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

def active_element
  Element.new self, 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.



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

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.



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

def alert=(keys)
  execute :send_alert_text, {}, {handler: 'prompt', 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.



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

def alert_text
  execute :get_alert_text
end

#browserObject

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.



73
74
75
76
77
78
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 73

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.



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

def clear_element(element)
  execute :element_clear, id: element.values.first
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.



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

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.



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

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

#clickObject

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.



390
391
392
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 390

def click
  execute :click, {}, {button: 0}
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.

actions



386
387
388
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 386

def click_element(element)
  execute :element_click, id: element.values.first
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.



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

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.



93
94
95
96
97
98
99
100
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 93

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

#context_clickObject

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.



398
399
400
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 398

def context_click
  execute :click, {}, {button: 2}
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.



370
371
372
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 370

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.



374
375
376
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 374

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.



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

def create_session(desired_capabilities)
  # TODO - Remove this when Mozilla fixes bug
  desired_capabilities[:browser_name] = 'firefox' if desired_capabilities[:browser_name] == 'Firefox'

  resp = raw_execute :new_session, {}, {desiredCapabilities: desired_capabilities}
  @session_id = resp['sessionId']
  return W3CCapabilities.json_create resp['value'] if @session_id

  raise Error::WebDriverError, 'no sessionId in returned payload'
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.



378
379
380
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 378

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.



366
367
368
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 366

def delete_cookie(name)
  execute :delete_cookie, name: name
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.



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

def dismiss_alert
  execute :dismiss_alert
end

#double_clickObject

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.



394
395
396
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 394

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



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

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

#driver_extensionsObject

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
86
87
88
89
90
91
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 80

def driver_extensions
  [
    DriverExtensions::HasInputDevices,
    DriverExtensions::UploadsFiles,
    DriverExtensions::TakesScreenshot,
    DriverExtensions::HasSessionId,
    DriverExtensions::Rotatable,
    DriverExtensions::HasTouchScreen,
    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.



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

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)


547
548
549
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 547

def element_displayed?(element)
  execute :is_element_displayed, id: element.values.first
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)


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

def element_enabled?(element)
  execute :is_element_enabled, id: element.values.first
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.



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

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

  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.



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

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.



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

def element_property(element, name)
  execute :get_element_property, id: element.ref.values.first, name: name
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)


543
544
545
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 543

def element_selected?(element)
  execute :is_element_selected, id: element.values.first
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.



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

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

  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



502
503
504
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 502

def element_tag_name(element)
  execute :get_element_tag_name, id: element.values.first
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.



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

def element_text(element)
  execute :get_element_text, id: element.values.first
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.



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

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.



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

def element_value_of_css_property(element, prop)
  execute :get_element_css_value, id: element.values.first, 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.



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

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



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

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.



565
566
567
568
569
570
571
572
573
574
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 565

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

  id = if parent
         execute :find_child_element, {id: parent.values.first}, {using: how, value: what}
       else
         execute :find_element, {}, {using: how, value: what}
       end
  Element.new self, 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.



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

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

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

  ids.map { |id| Element.new self, 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.



247
248
249
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 247

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_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



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

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.



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

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

#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



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

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.



288
289
290
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 288

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.



296
297
298
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 296

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.



324
325
326
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 324

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.



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

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

#mouse_downObject

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.



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

def mouse_down
  execute :mouse_down
end

#mouse_move_to(element, x = nil, y = 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.



410
411
412
413
414
415
416
417
418
419
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 410

def mouse_move_to(element, x = nil, y = nil)
  params = {element: element}

  if x && y
    params[:xoffset] = x
    params[:yoffset] = y
  end

  execute :mouse_move_to, {}, params
end

#mouse_upObject

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.



406
407
408
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 406

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



332
333
334
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 332

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.



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

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



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

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.



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

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.



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

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.



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

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



284
285
286
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 284

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.



308
309
310
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 308

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

#reposition_window(_x, _y, _handle = 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.



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

def reposition_window(_x, _y, _handle = nil)
  raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting the Window Position'
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.



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

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_size, {}, {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.



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

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.



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

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.



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

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_keys_to_active_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.



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

def send_keys_to_active_element(keys)
  send_keys_to_element(active_element, keys)
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



426
427
428
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 426

def send_keys_to_element(element, keys)
  execute :element_send_keys, {id: element.values.first}, {value: keys.join('').split(//)}
end

#session_idObject

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.



106
107
108
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 106

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.



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

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.



312
313
314
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 312

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.



320
321
322
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 320

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.



328
329
330
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 328

def set_location(_lat, _lon, _alt)
  raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting location'
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.



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.



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

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.



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

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.



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

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.



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

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.



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

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

def timeout(type, milliseconds)
  execute :set_timeout, {}, {type: type, ms: 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.



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

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.



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

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.



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

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.



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

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.



479
480
481
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 479

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.



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

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.



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

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.



469
470
471
472
473
474
475
476
477
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 469

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.



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

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.



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

def touch_up(x, y)
  execute :touch_up, {}, {x: x, y: y}
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.



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

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.



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

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



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

def window_handles
  execute :get_window_handles
end

#window_position(_handle = 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.



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

def window_position(_handle = nil)
  raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting the Window Position'
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.



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

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

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