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

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



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

def accept_alert
  execute :accept_alert
end

#actionActionBuilder

Returns:



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

def action
  ActionBuilder.new Mouse.new(self), Keyboard.new(self)
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



606
607
608
# File 'lib/selenium/webdriver/remote/bridge.rb', line 606

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.



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

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.



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

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.



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

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.



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

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



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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

def driver_extensions
  [
    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.



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

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)


594
595
596
# File 'lib/selenium/webdriver/remote/bridge.rb', line 594

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)


586
587
588
# File 'lib/selenium/webdriver/remote/bridge.rb', line 586

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.



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

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.



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

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



556
557
558
# File 'lib/selenium/webdriver/remote/bridge.rb', line 556

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)


590
591
592
# File 'lib/selenium/webdriver/remote/bridge.rb', line 590

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.



580
581
582
583
584
# File 'lib/selenium/webdriver/remote/bridge.rb', line 580

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



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

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.



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

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.



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

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.



598
599
600
# File 'lib/selenium/webdriver/remote/bridge.rb', line 598

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.



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

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



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

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.



612
613
614
615
616
617
618
619
620
# File 'lib/selenium/webdriver/remote/bridge.rb', line 612

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.



622
623
624
625
626
627
628
629
630
# File 'lib/selenium/webdriver/remote/bridge.rb', line 622

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.



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

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



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

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.



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

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.



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

def implicit_wait_timeout=(milliseconds)
  execute :implicitly_wait, {}, {ms: milliseconds}
end

#keyboardObject

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



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

def keyboard
  warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
    [DEPRECATION] `Driver#keyboard` is deprecated with w3c implementation. Instead use 
    driver.action.<command>.perform
  DEPRECATE
  Keyboard.new self
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



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

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.



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

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.



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

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.



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

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.



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

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.



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

def maximize_window(handle = :current)
  execute :maximize_window, window_handle: handle
end

#mouseObject

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



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

def mouse
  warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
    [DEPRECATION] `Driver#mouse` is deprecated with w3c implementation. Instead use 
    driver.action.<command>.perform
  DEPRECATE
  Mouse.new self
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.



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

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.



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

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.



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

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.



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

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.



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

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



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

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.



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

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.



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

def quit
  execute :quit
  http.close
rescue *http.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/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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



440
441
442
443
444
445
446
447
# File 'lib/selenium/webdriver/remote/bridge.rb', line 440

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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

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.



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

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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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.



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

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

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



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

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.



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

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.



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

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

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