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

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

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.

github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#command-reference

{

    new_session: [:post, 'session'.freeze],
    get_capabilities: [:get, 'session/:session_id'.freeze],
    status: [:get, 'status'.freeze],

    #
    # basic driver
    #

    get_current_url: [:get, 'session/:session_id/url'.freeze],
    get: [:post, 'session/:session_id/url'.freeze],
    go_forward: [:post, 'session/:session_id/forward'.freeze],
    go_back: [:post, 'session/:session_id/back'.freeze],
    refresh: [:post, 'session/:session_id/refresh'.freeze],
    quit: [:delete, 'session/:session_id'.freeze],
    close: [:delete, 'session/:session_id/window'.freeze],
    get_page_source: [:get, 'session/:session_id/source'.freeze],
    get_title: [:get, 'session/:session_id/title'.freeze],
    find_element: [:post, 'session/:session_id/element'.freeze],
    find_elements: [:post, 'session/:session_id/elements'.freeze],
    get_active_element: [:post, 'session/:session_id/element/active'.freeze],

    #
    # window handling
    #

    get_current_window_handle: [:get, 'session/:session_id/window_handle'.freeze],
    get_window_handles: [:get, 'session/:session_id/window_handles'.freeze],
    set_window_size: [:post, 'session/:session_id/window/:window_handle/size'.freeze],
    set_window_position: [:post, 'session/:session_id/window/:window_handle/position'.freeze],
    get_window_size: [:get, 'session/:session_id/window/:window_handle/size'.freeze],
    get_window_position: [:get, 'session/:session_id/window/:window_handle/position'.freeze],
    maximize_window: [:post, 'session/:session_id/window/:window_handle/maximize'.freeze],

    #
    # script execution
    #

    execute_script: [:post, 'session/:session_id/execute'.freeze],
    execute_async_script: [:post, 'session/:session_id/execute_async'.freeze],

    #
    # screenshot
    #

    screenshot: [:get, 'session/:session_id/screenshot'.freeze],

    #
    # alerts
    #

    dismiss_alert: [:post, 'session/:session_id/dismiss_alert'.freeze],
    accept_alert: [:post, 'session/:session_id/accept_alert'.freeze],
    get_alert_text: [:get, 'session/:session_id/alert_text'.freeze],
    set_alert_value: [:post, 'session/:session_id/alert_text'.freeze],
    set_authentication: [:post, 'session/:session_id/alert/credentials'.freeze],

    #
    # target locator
    #

    switch_to_frame: [:post, 'session/:session_id/frame'.freeze],
    switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'.freeze],
    switch_to_window: [:post, 'session/:session_id/window'.freeze],

    #
    # options
    #

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

    #
    # timeouts
    #

    implicitly_wait: [:post, 'session/:session_id/timeouts/implicit_wait'.freeze],
    set_script_timeout: [:post, 'session/:session_id/timeouts/async_script'.freeze],
    set_timeout: [:post, 'session/:session_id/timeouts'.freeze],

    #
    # element
    #

    describe_element: [:get, 'session/:session_id/element/:id'.freeze],
    find_child_element: [:post, 'session/:session_id/element/:id/element'.freeze],
    find_child_elements: [:post, 'session/:session_id/element/:id/elements'.freeze],
    click_element: [:post, 'session/:session_id/element/:id/click'.freeze],
    submit_element: [:post, 'session/:session_id/element/:id/submit'.freeze],
    get_element_value: [:get, 'session/:session_id/element/:id/value'.freeze],
    send_keys_to_element: [:post, 'session/:session_id/element/:id/value'.freeze],
    upload_file: [:post, 'session/:session_id/file'.freeze],
    get_element_tag_name: [:get, 'session/:session_id/element/:id/name'.freeze],
    clear_element: [:post, 'session/:session_id/element/:id/clear'.freeze],
    is_element_selected: [:get, 'session/:session_id/element/:id/selected'.freeze],
    is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'.freeze],
    get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'.freeze],
    element_equals: [:get, 'session/:session_id/element/:id/equals/:other'.freeze],
    is_element_displayed: [:get, 'session/:session_id/element/:id/displayed'.freeze],
    get_element_location: [:get, 'session/:session_id/element/:id/location'.freeze],
    get_element_location_once_scrolled_into_view: [:get, 'session/:session_id/element/:id/location_in_view'.freeze],
    get_element_size: [:get, 'session/:session_id/element/:id/size'.freeze],
    drag_element: [:post, 'session/:session_id/element/:id/drag'.freeze],
    get_element_value_of_css_property: [:get, 'session/:session_id/element/:id/css/:property_name'.freeze],
    get_element_text: [:get, 'session/:session_id/element/:id/text'.freeze],

    #
    # rotatable
    #

    get_screen_orientation: [:get, 'session/:session_id/orientation'.freeze],
    set_screen_orientation: [:post, 'session/:session_id/orientation'.freeze],

    #
    # interactions API
    #

    click: [:post, 'session/:session_id/click'.freeze],
    double_click: [:post, 'session/:session_id/doubleclick'.freeze],
    mouse_down: [:post, 'session/:session_id/buttondown'.freeze],
    mouse_up: [:post, 'session/:session_id/buttonup'.freeze],
    mouse_move_to: [:post, 'session/:session_id/moveto'.freeze],
    send_modifier_key_to_active_element: [:post, 'session/:session_id/modifier'.freeze],
    send_keys_to_active_element: [:post, 'session/:session_id/keys'.freeze],

    #
    # html 5
    #

    execute_sql: [:post, 'session/:session_id/execute_sql'.freeze],

    get_location: [:get, 'session/:session_id/location'.freeze],
    set_location: [:post, 'session/:session_id/location'.freeze],

    get_app_cache: [:get, 'session/:session_id/application_cache'.freeze],
    get_app_cache_status: [:get, 'session/:session_id/application_cache/status'.freeze],
    clear_app_cache: [:delete, 'session/:session_id/application_cache/clear'.freeze],

    get_network_connection: [:get, 'session/:session_id/network_connection'.freeze],
    set_network_connection: [:post, 'session/:session_id/network_connection'.freeze],

    get_local_storage_item: [:get, 'session/:session_id/local_storage/key/:key'.freeze],
    remove_local_storage_item: [:delete, 'session/:session_id/local_storage/key/:key'.freeze],
    get_local_storage_keys: [:get, 'session/:session_id/local_storage'.freeze],
    set_local_storage_item: [:post, 'session/:session_id/local_storage'.freeze],
    clear_local_storage: [:delete, 'session/:session_id/local_storage'.freeze],
    get_local_storage_size: [:get, 'session/:session_id/local_storage/size'.freeze],

    get_session_storage_item: [:get, 'session/:session_id/session_storage/key/:key'.freeze],
    remove_session_storage_item: [:delete, 'session/:session_id/session_storage/key/:key'.freeze],
    get_session_storage_keys: [:get, 'session/:session_id/session_storage'.freeze],
    set_session_storage_item: [:post, 'session/:session_id/session_storage'.freeze],
    clear_session_storage: [:delete, 'session/:session_id/session_storage'.freeze],
    get_session_storage_size: [:get, 'session/:session_id/session_storage/size'.freeze],

    #
    # ime
    #

    ime_get_available_engines: [:get, 'session/:session_id/ime/available_engines'.freeze],
    ime_get_active_engine: [:get, 'session/:session_id/ime/active_engine'.freeze],
    ime_is_activated: [:get, 'session/:session_id/ime/activated'.freeze],
    ime_deactivate: [:post, 'session/:session_id/ime/deactivate'.freeze],
    ime_activate_engine: [:post, 'session/:session_id/ime/activate'.freeze],

    #
    # touch
    #

    touch_single_tap: [:post, 'session/:session_id/touch/click'.freeze],
    touch_double_tap: [:post, 'session/:session_id/touch/doubleclick'.freeze],
    touch_long_press: [:post, 'session/:session_id/touch/longclick'.freeze],
    touch_down: [:post, 'session/:session_id/touch/down'.freeze],
    touch_up: [:post, 'session/:session_id/touch/up'.freeze],
    touch_move: [:post, 'session/:session_id/touch/move'.freeze],
    touch_scroll: [:post, 'session/:session_id/touch/scroll'.freeze],
    touch_flick: [:post, 'session/:session_id/touch/flick'.freeze],

    #
    # logs
    #

    get_available_log_types: [:get, 'session/:session_id/log/types'.freeze],
    get_log: [:post, 'session/:session_id/log'.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 = {}) ⇒ 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)

    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



43
44
45
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
72
# File 'lib/selenium/webdriver/remote/bridge.rb', line 43

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) { Capabilities.firefox }
  url = opts.delete(:url) { "http://#{Platform.localhost}:#{port}/wd/hub" }

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

  if desired_capabilities.is_a?(Symbol)
    unless Capabilities.respond_to?(desired_capabilities)
      raise Error::WebDriverError, "invalid desired capability: #{desired_capabilities.inspect}"
    end

    desired_capabilities = Capabilities.send(desired_capabilities)
  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.



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

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.



32
33
34
# File 'lib/selenium/webdriver/remote/bridge.rb', line 32

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.



32
33
34
# File 'lib/selenium/webdriver/remote/bridge.rb', line 32

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.



32
33
34
# File 'lib/selenium/webdriver/remote/bridge.rb', line 32

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



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

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



584
585
586
# File 'lib/selenium/webdriver/remote/bridge.rb', line 584

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.



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

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.



152
153
154
# File 'lib/selenium/webdriver/remote/bridge.rb', line 152

def alert=(keys)
  execute :set_alert_value, {}, {text: keys.to_s}
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.



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

def alert_text
  execute :get_alert_text
end

#authentication(credentials) ⇒ 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.



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

def authentication(credentials)
  execute :set_authentication, {}, credentials
end

#available_log_typesObject

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

logs



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

def available_log_types
  types = execute :get_available_log_types
  Array(types).map(&:to_sym)
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.



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

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

#clear_element(element) ⇒ Object

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



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

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



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

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



307
308
309
# File 'lib/selenium/webdriver/remote/bridge.rb', line 307

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



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

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



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

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



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

def close
  execute :close
end

#commands(command) ⇒ Object

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



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

def commands(command)
  COMMANDS[command]
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.



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

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



367
368
369
# File 'lib/selenium/webdriver/remote/bridge.rb', line 367

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



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

def create_session(desired_capabilities)
  resp = raw_execute :new_session, {}, {desiredCapabilities: desired_capabilities}
  @session_id = resp['sessionId']
  return Capabilities.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.



371
372
373
# File 'lib/selenium/webdriver/remote/bridge.rb', line 371

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.



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

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.



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

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.



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

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.



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

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.



81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/selenium/webdriver/remote/bridge.rb', line 81

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



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

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


572
573
574
# File 'lib/selenium/webdriver/remote/bridge.rb', line 572

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)


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

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.



546
547
548
549
550
# File 'lib/selenium/webdriver/remote/bridge.rb', line 546

def element_location(element)
  data = execute :get_element_location, 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.



552
553
554
555
556
# File 'lib/selenium/webdriver/remote/bridge.rb', line 552

def element_location_once_scrolled_into_view(element)
  data = execute :get_element_location_once_scrolled_into_view, id: element

  Point.new data['x'], data['y']
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.

Backwards compatibility for w3c



534
535
536
# File 'lib/selenium/webdriver/remote/bridge.rb', line 534

def element_property(element, name)
  execute_script 'return arguments[0][arguments[1]]', element, 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)


568
569
570
# File 'lib/selenium/webdriver/remote/bridge.rb', line 568

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.



558
559
560
561
562
# File 'lib/selenium/webdriver/remote/bridge.rb', line 558

def element_size(element)
  data = execute :get_element_size, 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



525
526
527
# File 'lib/selenium/webdriver/remote/bridge.rb', line 525

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.



542
543
544
# File 'lib/selenium/webdriver/remote/bridge.rb', line 542

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.



538
539
540
# File 'lib/selenium/webdriver/remote/bridge.rb', line 538

def element_value(element)
  execute :get_element_value, id: element
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.



576
577
578
# File 'lib/selenium/webdriver/remote/bridge.rb', line 576

def element_value_of_css_property(element, prop)
  execute :get_element_value_of_css_property, 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.



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

def execute_async_script(script, *args)
  assert_javascript_enabled

  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



337
338
339
340
341
342
# File 'lib/selenium/webdriver/remote/bridge.rb', line 337

def execute_script(script, *args)
  assert_javascript_enabled

  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.



590
591
592
593
594
595
596
597
598
# File 'lib/selenium/webdriver/remote/bridge.rb', line 590

def find_element_by(how, what, parent = nil)
  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.



600
601
602
603
604
605
606
607
608
# File 'lib/selenium/webdriver/remote/bridge.rb', line 600

def find_elements_by(how, what, parent = nil)
  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

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



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

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



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

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



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

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



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

def implicit_wait_timeout=(milliseconds)
  execute :implicitly_wait, {}, {ms: 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



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

def local_storage_item(key, value = nil)
  if value
    execute :set_local_storage_item, {}, {key: key, value: value}
  else
    execute :get_local_storage_item, key: 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.



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

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



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

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



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

def location
  obj = execute(:get_location) || {}
  Location.new obj['latitude'], obj['longitude'], obj['altitude']
end

#log(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.



509
510
511
512
513
514
515
516
517
518
519
# File 'lib/selenium/webdriver/remote/bridge.rb', line 509

def log(type)
  data = execute :get_log, {}, {type: type.to_s}

  Array(data).map do |l|
    begin
      LogEntry.new l.fetch('level', 'UNKNOWN'), l.fetch('timestamp'), l.fetch('message')
    rescue KeyError
      next
    end
  end
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.



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

def maximize_window(handle = :current)
  execute :maximize_window, window_handle: handle
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.



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

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.



403
404
405
406
407
408
409
410
411
412
# File 'lib/selenium/webdriver/remote/bridge.rb', line 403

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.



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

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.



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

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



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

def network_connection=(type)
  execute :set_network_connection, {}, {parameters: {type: type}}
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



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

def options
  @options ||= WebDriver::Options.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.



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

def page_source
  execute :get_page_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/bridge.rb', line 206

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



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

def remove_local_storage_item(key)
  execute :remove_local_storage_item, key: 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.



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

def remove_session_storage_item(key)
  execute :remove_session_storage_item, key: key
end

#reposition_window(x, y, 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
# File 'lib/selenium/webdriver/remote/bridge.rb', line 248

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



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

def resize_window(width, height, handle = :current)
  execute :set_window_size, {window_handle: handle},
          {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.



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

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.



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

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.



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

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



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

def script_timeout=(milliseconds)
  execute :set_script_timeout, {}, {ms: milliseconds}
end

#send_keys_to_active_element(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.



414
415
416
# File 'lib/selenium/webdriver/remote/bridge.rb', line 414

def send_keys_to_active_element(key)
  execute :send_keys_to_active_element, {}, {value: key}
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.



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

def send_keys_to_element(element, keys)
  if @file_detector
    local_file = @file_detector.call(keys)
    keys = upload(local_file) if local_file
  end

  execute :send_keys_to_element, {id: element}, {value: Array(keys)}
end

#session_capabilitiesObject

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



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

def session_capabilities
  Capabilities.json_create execute(:get_capabilities)
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.



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

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.



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

def session_storage_item(key, value = nil)
  if value
    execute :set_session_storage_item, {}, {key: key, value: value}
  else
    execute :get_session_storage_item, key: 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.



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

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



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

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



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

def set_location(lat, lon, alt)
  loc = {latitude: lat, longitude: lon, altitude: alt}
  execute :set_location, {}, {location: loc}
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.



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

def status
  execute :status
end

#submit_element(element) ⇒ Object

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



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

def submit_element(element)
  execute :submit_element, id: element
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/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.



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

def switch_to_frame(id)
  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/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.



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

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



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

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.



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

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.



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

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.



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

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.



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

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.



481
482
483
# File 'lib/selenium/webdriver/remote/bridge.rb', line 481

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.



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

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.



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

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.



471
472
473
474
475
476
477
478
479
# File 'lib/selenium/webdriver/remote/bridge.rb', line 471

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.



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

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.



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

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

#upload(local_file) ⇒ Object

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



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

def upload(local_file)
  unless File.file?(local_file)
    raise Error::WebDriverError, "you may only upload files: #{local_file.inspect}"
  end

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

#urlObject

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



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

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/bridge.rb', line 228

def window_handle
  execute :get_current_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/bridge.rb', line 224

def window_handles
  execute :get_window_handles
end

#window_position(handle = :current) ⇒ Object

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



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

def window_position(handle = :current)
  data = execute :get_window_position, window_handle: handle

  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.



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

def window_size(handle = :current)
  data = execute :get_window_size, window_handle: handle

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