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],
    set_window_position: [:post, 'session/:session_id/window/position'.freeze],
    get_window_position: [:get, 'session/:session_id/window/position'.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



142
143
144
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 142

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



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

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.



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

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.



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

def alert=(keys)
  execute :send_alert_text, {}, {value: keys.split(//)}
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.



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

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.



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

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.



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

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.



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

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.



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

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



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

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.



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

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.



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

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.



368
369
370
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 368

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.



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

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

def create_session(desired_capabilities)
  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.



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

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.



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

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.



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

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.



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

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.



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

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



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

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)


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

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

#element_enabled?(element) ⇒ Boolean

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

Returns:

  • (Boolean)


537
538
539
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 537

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.



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

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.



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

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.



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

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


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

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.



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

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



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

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.



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

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.



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

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.



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

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.



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

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



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

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.



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

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.



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

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.



244
245
246
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 244

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.



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

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



162
163
164
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 162

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.



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

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.



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

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



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

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.



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

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.



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

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.



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

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.



237
238
239
240
241
242
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 237

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.



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

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.



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

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.



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

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.



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

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.



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

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



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

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.



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

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.



203
204
205
206
207
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 203

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.



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

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.



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

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.



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

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.



257
258
259
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 257

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



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

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.



492
493
494
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 492

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.



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

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.



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

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.



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

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.



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

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



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

def send_keys_to_element(element, keys)
  execute :element_send_keys, {id: element}, {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.



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

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.



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

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.



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

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.



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

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.



118
119
120
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 118

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



477
478
479
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 477

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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



221
222
223
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 221

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.



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

def window_position
  data = execute :get_window_position
  Point.new data['x'], data['y']
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.



248
249
250
251
252
253
254
255
# File 'lib/selenium/webdriver/remote/w3c_bridge.rb', line 248

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