Class: Selenium::WebDriver::Remote::Bridge Private
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
|
|
Inherits: | Object |
Defined in: | rb/lib/selenium/webdriver/remote/bridge/commands.rb, rb/lib/selenium/webdriver/remote/bridge.rb, rb/lib/selenium/webdriver/remote/bridge/locator_converter.rb |
Overview
Constant Summary
-
COMMANDS =
Internal use only
# File 'rb/lib/selenium/webdriver/remote/bridge/commands.rb', line 29{ status: [:get, 'status'], # # session handling # new_session: [:post, 'session'], delete_session: [:delete, 'session/:session_id'], # # basic driver # get: [:post, 'session/:session_id/url'], get_current_url: [:get, 'session/:session_id/url'], back: [:post, 'session/:session_id/back'], forward: [:post, 'session/:session_id/forward'], refresh: [:post, 'session/:session_id/refresh'], get_title: [:get, 'session/:session_id/title'], # # window and Frame handling # get_window_handle: [:get, 'session/:session_id/window'], new_window: [:post, 'session/:session_id/window/new'], close_window: [:delete, 'session/:session_id/window'], switch_to_window: [:post, 'session/:session_id/window'], get_window_handles: [:get, 'session/:session_id/window/handles'], fullscreen_window: [:post, 'session/:session_id/window/fullscreen'], minimize_window: [:post, 'session/:session_id/window/minimize'], maximize_window: [:post, 'session/:session_id/window/maximize'], set_window_rect: [:post, 'session/:session_id/window/rect'], get_window_rect: [:get, 'session/:session_id/window/rect'], switch_to_frame: [:post, 'session/:session_id/frame'], switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'], # # element # find_element: [:post, 'session/:session_id/element'], find_elements: [:post, 'session/:session_id/elements'], find_child_element: [:post, 'session/:session_id/element/:id/element'], find_child_elements: [:post, 'session/:session_id/element/:id/elements'], find_shadow_child_element: [:post, 'session/:session_id/shadow/:id/element'], find_shadow_child_elements: [:post, 'session/:session_id/shadow/:id/elements'], get_active_element: [:get, 'session/:session_id/element/active'], get_element_shadow_root: [:get, 'session/:session_id/element/:id/shadow'], is_element_selected: [:get, 'session/:session_id/element/:id/selected'], get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'], get_element_property: [:get, 'session/:session_id/element/:id/property/:name'], get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'], get_element_aria_role: [:get, 'session/:session_id/element/:id/computedrole'], get_element_aria_label: [:get, 'session/:session_id/element/:id/computedlabel'], get_element_text: [:get, 'session/:session_id/element/:id/text'], get_element_tag_name: [:get, 'session/:session_id/element/:id/name'], get_element_rect: [:get, 'session/:session_id/element/:id/rect'], is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'], # # document handling # get_page_source: [:get, 'session/:session_id/source'], execute_script: [:post, 'session/:session_id/execute/sync'], execute_async_script: [:post, 'session/:session_id/execute/async'], # # cookies # get_all_cookies: [:get, 'session/:session_id/cookie'], get_cookie: [:get, 'session/:session_id/cookie/:name'], add_cookie: [:post, 'session/:session_id/cookie'], delete_cookie: [:delete, 'session/:session_id/cookie/:name'], delete_all_cookies: [:delete, 'session/:session_id/cookie'], # # timeouts # get_timeouts: [:get, 'session/:session_id/timeouts'], set_timeout: [:post, 'session/:session_id/timeouts'], # # actions # actions: [:post, 'session/:session_id/actions'], release_actions: [:delete, 'session/:session_id/actions'], print_page: [:post, 'session/:session_id/print'], # # Element Operations # element_click: [:post, 'session/:session_id/element/:id/click'], element_clear: [:post, 'session/:session_id/element/:id/clear'], element_send_keys: [:post, 'session/:session_id/element/:id/value'], # # alerts # dismiss_alert: [:post, 'session/:session_id/alert/dismiss'], accept_alert: [:post, 'session/:session_id/alert/accept'], get_alert_text: [:get, 'session/:session_id/alert/text'], send_alert_text: [:post, 'session/:session_id/alert/text'], # # screenshot # take_screenshot: [:get, 'session/:session_id/screenshot'], take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'], # # virtual-authenticator # add_virtual_authenticator: [:post, 'session/:session_id/webauthn/authenticator'], remove_virtual_authenticator: [:delete, 'session/:session_id/webauthn/authenticator/:authenticatorId'], add_credential: [:post, 'session/:session_id/webauthn/authenticator/:authenticatorId/credential'], get_credentials: [:get, 'session/:session_id/webauthn/authenticator/:authenticatorId/credentials'], remove_credential: [:delete, 'session/:session_id/webauthn/authenticator/:authenticatorId/credentials/:credentialId'], remove_all_credentials: [:delete, 'session/:session_id/webauthn/authenticator/:authenticatorId/credentials'], set_user_verified: [:post, 'session/:session_id/webauthn/authenticator/:authenticatorId/uv'], # # federated-credential management # get_fedcm_title: [:get, 'session/:session_id/fedcm/gettitle'], get_fedcm_dialog_type: [:get, 'session/:session_id/fedcm/getdialogtype'], get_fedcm_account_list: [:get, 'session/:session_id/fedcm/accountlist'], click_fedcm_dialog_button: [:post, 'session/:session_id/fedcm/clickdialogbutton'], cancel_fedcm_dialog: [:post, 'session/:session_id/fedcm/canceldialog'], select_fedcm_account: [:post, 'session/:session_id/fedcm/selectaccount'], set_fedcm_delay: [:post, 'session/:session_id/fedcm/setdelayenabled'], reset_fedcm_cooldown: [:post, 'session/:session_id/fedcm/resetcooldown'] }.freeze
-
PORT =
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 294444
-
QUIT_ERRORS =
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 209[IOError].freeze
Class Attribute Summary
- .element_class rw
- .element_class=(value) rw
- .extra_commands readonly
- .locator_converter rw
- .locator_converter=(value) rw
Class Method Summary
- .add_command(name, verb, url)
-
.new(url:, http_client: nil) ⇒ Bridge
constructor
Internal use only
Internal use only
Initializes the bridge with the given server URL.
Instance Attribute Summary
- #alert=(keys) writeonly
- #capabilities readonly
- #file_detector rw
- #http rw
-
#timeouts
rw
timeouts.
- #timeouts=(timeouts) rw
Instance Method Summary
-
#accept_alert
alerts.
-
#action(async: false, devices: [], duration: 250)
(also: #actions)
actions.
-
#actions(async: false, devices: [], duration: 250)
Alias for #action.
-
#active_element
(also: #switch_to_active_element)
finding elements.
- #add_cookie(cookie)
- #add_credential(credential, id)
-
#add_virtual_authenticator(options)
virtual-authenticator.
- #alert_text
- #bidi
- #browser
-
#cancel_fedcm_dialog
federated-credential management.
- #clear_element(element)
- #clear_local_storage
- #clear_session_storage
- #click_element(element)
- #click_fedcm_dialog_button
- #close
- #command_list
- #cookie(name)
- #cookies
-
#create_session(capabilities)
Creates session.
- #credentials(authenticator_id)
- #delete_all_cookies
- #delete_cookie(name)
- #dismiss_alert
- #element_aria_label(element)
- #element_aria_role(element)
- #element_attribute(element, name)
- #element_displayed?(element) ⇒ Boolean
- #element_dom_attribute(element, name)
- #element_enabled?(element) ⇒ Boolean
- #element_location(element)
- #element_location_once_scrolled_into_view(element)
- #element_property(element, name)
- #element_rect(element)
- #element_screenshot(element)
- #element_selected?(element) ⇒ Boolean
- #element_size(element)
-
#element_tag_name(element)
element properties.
- #element_text(element)
- #element_value(element)
- #element_value_of_css_property(element, prop)
- #execute_async_script(script, *args)
-
#execute_script(script, *args)
javascript execution.
- #fedcm_account_list
- #fedcm_delay(enabled)
- #fedcm_dialog_type
- #fedcm_subtitle
- #fedcm_title
- #find_element_by(how, what, parent_ref = [])
- #find_elements_by(how, what, parent_ref = [])
- #full_screen_window
- #get(url)
-
#go_back
navigation.
- #go_forward
-
#local_storage_item(key, value = nil)
HTML 5.
- #local_storage_keys
- #local_storage_size
-
#manage
cookies.
- #maximize_window(handle = :current)
- #minimize_window
-
#new_window(type) ⇒ Hash
Create a new top-level browsing context w3c.github.io/webdriver/#new-window.
- #page_source
- #print_page(options = {})
- #quit
- #refresh
- #release_actions
- #remove_all_credentials(authenticator_id)
- #remove_credential(credential_id, authenticator_id)
- #remove_local_storage_item(key)
- #remove_session_storage_item(key)
- #remove_virtual_authenticator(id)
- #reposition_window(x, y)
- #reset_fedcm_cooldown
- #resize_window(width, height, handle = :current)
- #screenshot
- #select_fedcm_account(index)
- #send_actions(data)
- #send_keys_to_element(element, keys)
-
#session_id
Returns the current session ID.
- #session_storage_item(key, value = nil)
- #session_storage_keys
- #session_storage_size
- #set_window_rect(x: nil, y: nil, width: nil, height: nil)
- #shadow_root(element)
- #status
- #submit_element(element)
-
#switch_to_active_element
Alias for #active_element.
- #switch_to_default_content
- #switch_to_frame(id)
- #switch_to_parent_frame
- #switch_to_window(name)
- #title
- #url
- #user_verified(verified, authenticator_id)
- #window_handle
-
#window_handles
window handling.
- #window_position
- #window_rect
- #window_size(handle = :current)
- #commands(command) private
- #element_id_from(id) private
- #escaper private
-
#execute(command, opts = {}, command_hash = nil) ⇒ WebDriver::Remote::Response
private
executes a command on the remote server.
- #prepare_capabilities_payload(capabilities) private
- #shadow_root_id_from(id) private
- #unwrap_script_result(arg) private
::Selenium::WebDriver::Atoms
- Included
Constructor Details
.new(url:, http_client: nil) ⇒ Bridge
Initializes the bridge with the given server URL
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 60
def initialize(url:, http_client: nil) uri = url.is_a?(URI) ? url : URI.parse(url) uri.path += '/' unless uri.path.end_with?('/') @http = http_client || Http::Default.new @http.server_url = uri @file_detector = nil @locator_converter = self.class.locator_converter end
Class Attribute Details
.element_class (rw)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 48
def element_class @element_class ||= Element end
.element_class=(value) (rw)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 36
attr_writer :element_class, :locator_converter
.extra_commands (readonly)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 35
attr_reader :extra_commands
.locator_converter (rw)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 44
def locator_converter @locator_converter ||= LocatorConverter.new end
.locator_converter=(value) (rw)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 36
attr_writer :element_class, :locator_converter
Class Method Details
.add_command(name, verb, url)
[ GitHub ]Instance Attribute Details
#alert=(keys) (writeonly)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 146
def alert=(keys) execute :send_alert_text, {}, {value: keys.chars, text: keys} end
#capabilities (readonly)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 32
attr_reader :capabilities
#file_detector (rw)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 31
attr_accessor :http, :file_detector
#http (rw)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 31
attr_accessor :http, :file_detector
#timeouts (rw)
timeouts
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 126
def timeouts execute :get_timeouts, {} end
#timeouts=(timeouts) (rw)
[ GitHub ]Instance Method Details
#accept_alert
alerts
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 138
def accept_alert execute :accept_alert end
#action(async: false, devices: [], duration: 250) Also known as: #actions
actions
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 407
def action(async: false, devices: [], duration: 250) ActionBuilder.new self, async: async, devices: devices, duration: duration end
#actions(async: false, devices: [], duration: 250)
Alias for #action.
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 410
alias actions action
#active_element Also known as: #switch_to_active_element
finding elements
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 535
def active_element Bridge.element_class.new self, element_id_from(execute(:get_active_element)) end
#add_cookie(cookie)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 383
def ( ) execute :, {}, {cookie: } end
#add_credential(credential, id)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 595
def add_credential(credential, id) execute :add_credential, {authenticatorId: id}, credential end
#add_virtual_authenticator(options)
virtual-authenticator
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 586
def add_virtual_authenticator( ) authenticator_id = execute :add_virtual_authenticator, {}, .as_json VirtualAuthenticator.new(self, authenticator_id, ) end
#alert_text
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 150
def alert_text execute :get_alert_text end
#bidi
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 655
def bidi msg = 'BiDi must be enabled by setting #web_socket_url to true in options class' raise(WebDriver::Error::WebDriverError, msg) end
#browser
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 107
def browser @browser ||= begin name = @capabilities.browser_name name ? name.tr(' -', '_').downcase.to_sym : 'unknown' end end
#cancel_fedcm_dialog
federated-credential management
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 619
def cancel_fedcm_dialog execute :cancel_fedcm_dialog end
#clear_element(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 434
def clear_element(element) execute :element_clear, id: element end
#clear_local_storage
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 322
def clear_local_storage WebDriver.logger.deprecate('clear_local_storage', id: :clear_local_storage) execute_script('localStorage.clear()') end
#clear_session_storage
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 351
def clear_session_storage WebDriver.logger.deprecate('clear_session_storage', id: :clear_session_storage) execute_script('sessionStorage.clear()') end
#click_element(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 424
def click_element(element) execute :element_click, id: element end
#click_fedcm_dialog_button
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 651
def execute :, {}, {dialogButton: 'ConfirmIdpLoginContinue'} end
#close
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 218
def close execute :close_window end
#command_list
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 660
def command_list COMMANDS end
#commands(command) (private)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 692
def commands(command) command_list[command] || Bridge.extra_commands[command] end
#cookie(name)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 391
def (name) execute :, name: name end
#cookies
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 395
def execute : end
#create_session(capabilities)
Creates session.
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 75
def create_session(capabilities) response = execute(:new_session, {}, prepare_capabilities_payload(capabilities)) @session_id = response['sessionId'] capabilities = response['capabilities'] raise Error::WebDriverError, 'no sessionId in returned payload' unless @session_id @capabilities = Capabilities.json_create(capabilities) case @capabilities[:browser_name] when 'chrome', 'chrome-headless-shell' extend(WebDriver::Chrome::Features) when 'firefox' extend(WebDriver::Firefox::Features) when 'msedge', 'MicrosoftEdge' extend(WebDriver::Edge::Features) when 'Safari', 'Safari Technology Preview' extend(WebDriver::Safari::Features) when 'internet explorer' extend(WebDriver::IE::Features) end end
#credentials(authenticator_id)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 599
def credentials(authenticator_id) execute :get_credentials, {authenticatorId: authenticator_id} end
#delete_all_cookies
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 399
def execute : end
#delete_cookie(name)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 387
def (name) execute :, name: name end
#dismiss_alert
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 142
def dismiss_alert execute :dismiss_alert end
#element_aria_label(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 479
def element_aria_label(element) execute :get_element_aria_label, id: element end
#element_aria_role(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 475
def element_aria_role(element) execute :get_element_aria_role, id: element end
#element_attribute(element, name)
[ GitHub ]
#element_displayed?(element) ⇒ Boolean
#element_dom_attribute(element, name)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 467
def element_dom_attribute(element, name) execute :get_element_attribute, id: element, name: name end
#element_enabled?(element) ⇒ Boolean
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 514
def element_enabled?(element) execute :is_element_enabled, id: element end
#element_id_from(id) (private)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 713
def element_id_from(id) id['ELEMENT'] || id[Bridge.element_class::ELEMENT_KEY] end
#element_location(element)
[ GitHub ]#element_location_once_scrolled_into_view(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 503
def element_location_once_scrolled_into_view(element) send_keys_to_element(element, ['']) element_location(element) end
#element_property(element, name)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 471
def element_property(element, name) execute :get_element_property, id: element, name: name end
#element_rect(element)
[ GitHub ]#element_screenshot(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 295
def element_screenshot(element) execute :take_element_screenshot, id: element end
#element_selected?(element) ⇒ Boolean
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 518
def element_selected?(element) execute :is_element_selected, id: element end
#element_size(element)
[ GitHub ]#element_tag_name(element)
element properties
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 458
def element_tag_name(element) execute :get_element_tag_name, id: element end
#element_text(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 487
def element_text(element) execute :get_element_text, id: element end
#element_value(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 483
def element_value(element) element_property element, 'value' end
#element_value_of_css_property(element, prop)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 527
def element_value_of_css_property(element, prop) execute :get_element_css_value, id: element, property_name: prop end
#escaper (private)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 688
def escaper @escaper ||= defined?(URI::RFC2396_PARSER) ? URI::RFC2396_PARSER : URI::DEFAULT_PARSER end
#execute(command, opts = {}, command_hash = nil) ⇒ WebDriver::Remote::Response (private)
executes a command on the remote server.
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 672
def execute(command, opts = {}, command_hash = nil) verb, path = commands(command) || raise(ArgumentError, "unknown command: #{command.inspect}") path = path.dup path[':session_id'] = session_id if path.include?(':session_id') begin opts.each { |key, value| path[key.inspect] = escaper.escape(value.to_s) } rescue IndexError raise ArgumentError, "#{opts.inspect} invalid for #{command.inspect}" end WebDriver.logger.debug("-> #{verb.to_s.upcase} #{path}", id: :command) http.call(verb, path, command_hash)['value'] end
#execute_async_script(script, *args)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 370
def execute_async_script(script, *args) result = execute :execute_async_script, {}, {script: script, args: args} unwrap_script_result result end
#execute_script(script, *args)
javascript execution
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 365
def execute_script(script, *args) result = execute :execute_script, {}, {script: script, args: args} unwrap_script_result result end
#fedcm_account_list
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 639
def fedcm_account_list execute :get_fedcm_account_list end
#fedcm_delay(enabled)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 643
def fedcm_delay(enabled) execute :set_fedcm_delay, {}, {enabled: enabled} end
#fedcm_dialog_type
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 627
def fedcm_dialog_type execute :get_fedcm_dialog_type end
#fedcm_subtitle
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 635
def fedcm_subtitle execute(:get_fedcm_title).fetch('subtitle', nil) end
#fedcm_title
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 631
def fedcm_title execute(:get_fedcm_title).fetch('title') end
#find_element_by(how, what, parent_ref = [])
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 541
def find_element_by(how, what, parent_ref = []) how, what = @locator_converter.convert(how, what) return execute_atom(:findElements, Support::RelativeLocator.new(what).as_json).first if how == 'relative' parent_type, parent_id = parent_ref id = case parent_type when :element execute :find_child_element, {id: parent_id}, {using: how, value: what.to_s} when :shadow_root execute :find_shadow_child_element, {id: parent_id}, {using: how, value: what.to_s} else execute :find_element, {}, {using: how, value: what.to_s} end Bridge.element_class.new self, element_id_from(id) end
#find_elements_by(how, what, parent_ref = [])
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 559
def find_elements_by(how, what, parent_ref = []) how, what = @locator_converter.convert(how, what) return execute_atom :findElements, Support::RelativeLocator.new(what).as_json if how == 'relative' parent_type, parent_id = parent_ref ids = case parent_type when :element execute :find_child_elements, {id: parent_id}, {using: how, value: what.to_s} when :shadow_root execute :find_shadow_child_elements, {id: parent_id}, {using: how, value: what.to_s} else execute :find_elements, {}, {using: how, value: what.to_s} end ids.map { |id| Bridge.element_class.new self, element_id_from(id) } end
#full_screen_window
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 267
def full_screen_window execute :fullscreen_window end
#get(url)
[ GitHub ]#go_back
navigation
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 158
def go_back execute :back end
#go_forward
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 162
def go_forward execute :forward end
#local_storage_item(key, value = nil)
HTML 5
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 303
def local_storage_item(key, value = nil) WebDriver.logger.deprecate('local_storage_item(key, value)', id: :local_storage_item) if value execute_script("localStorage.setItem('#{key}', '#{value}')") else execute_script("return localStorage.getItem('#{key}')") end end
#local_storage_keys
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 317
def local_storage_keys WebDriver.logger.deprecate('local_storage_keys', id: :local_storage_keys) execute_script('return Object.keys(localStorage)') end
#local_storage_size
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 327
def local_storage_size WebDriver.logger.deprecate('local_storage_size', id: :local_storage_size) execute_script('return localStorage.length') end
#manage
cookies
#maximize_window(handle = :current)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 258
def maximize_window(handle = :current) unless handle == :current raise Error::UnsupportedOperationError, 'Switch to desired window before changing its size' end execute :maximize_window end
#minimize_window
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 254
def minimize_window execute :minimize_window end
#new_window(type) ⇒ Hash
Create a new top-level browsing context w3c.github.io/webdriver/#new-window
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 188
def new_window(type) execute :new_window, {}, {type: type} end
#page_source
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 174
def page_source execute :get_page_source end
#prepare_capabilities_payload(capabilities) (private)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 721
def prepare_capabilities_payload(capabilities) capabilities = {alwaysMatch: capabilities} if !capabilities['alwaysMatch'] && !capabilities['firstMatch'] {capabilities: capabilities} end
#print_page(options = {})
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 420
def print_page( = {}) execute :print_page, {}, {options: } end
#quit
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 211
def quit execute :delete_session http.close rescue *QUIT_ERRORS nil end
#refresh
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 222
def refresh execute :refresh end
#release_actions
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 416
def release_actions execute :release_actions end
#remove_all_credentials(authenticator_id)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 607
def remove_all_credentials(authenticator_id) execute :remove_all_credentials, {authenticatorId: authenticator_id} end
#remove_credential(credential_id, authenticator_id)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 603
def remove_credential(credential_id, authenticator_id) execute :remove_credential, {credentialId: credential_id, authenticatorId: authenticator_id} end
#remove_local_storage_item(key)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 312
def remove_local_storage_item(key) WebDriver.logger.deprecate('remove_local_storage_item(key)', id: :remove_local_storage_item) execute_script("localStorage.removeItem('#{key}')") end
#remove_session_storage_item(key)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 341
def remove_session_storage_item(key) WebDriver.logger.deprecate('remove_session_storage_item(key)', id: :remove_session_storage_item) execute_script("sessionStorage.removeItem('#{key}')") end
#remove_virtual_authenticator(id)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 591
def remove_virtual_authenticator(id) execute :remove_virtual_authenticator, {authenticatorId: id} end
#reposition_window(x, y)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 271
def reposition_window(x, y) set_window_rect(x: x, y: y) end
#reset_fedcm_cooldown
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 647
def reset_fedcm_cooldown execute :reset_fedcm_cooldown end
#resize_window(width, height, handle = :current)
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 238
def resize_window(width, height, handle = :current) raise Error::WebDriverError, 'Switch to desired window before changing its size' unless handle == :current set_window_rect(width: width, height: height) end
#screenshot
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 291
def screenshot execute :take_screenshot end
#select_fedcm_account(index)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 623
def select_fedcm_account(index) execute :select_fedcm_account, {}, {accountIndex: index} end
#send_actions(data)
[ GitHub ]#send_keys_to_element(element, keys)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 428
def send_keys_to_element(element, keys) keys = upload_if_necessary(keys) if @file_detector text = keys.join execute :element_send_keys, {id: element}, {value: text.chars, text: text} end
#session_id
Returns the current session ID.
# File 'rb/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)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 332
def session_storage_item(key, value = nil) WebDriver.logger.deprecate('session_storage_item(key, value)', id: :session_storage_item) if value execute_script("sessionStorage.setItem('#{key}', '#{value}')") else execute_script("return sessionStorage.getItem('#{key}')") end end
#session_storage_keys
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 346
def session_storage_keys WebDriver.logger.deprecate('session_storage_keys', id: :session_storage_keys) execute_script('return Object.keys(sessionStorage)') end
#session_storage_size
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 356
def session_storage_size WebDriver.logger.deprecate('session_storage_size', id: :session_storage_size) execute_script('return sessionStorage.length') end
#set_window_rect(x: nil, y: nil, width: nil, height: nil)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 280
def set_window_rect(x: nil, y: nil, width: nil, height: nil) params = {x: x, y: y, width: width, height: height} params.update(params) { |_k, v| Integer(v) unless v.nil? } execute :set_window_rect, {}, params end
#shadow_root(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 577
def shadow_root(element) id = execute :get_element_shadow_root, id: element ShadowRoot.new self, shadow_root_id_from(id) end
#shadow_root_id_from(id) (private)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 717
def shadow_root_id_from(id) id[ShadowRoot::ROOT_KEY] end
#status
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 114
def status execute :status end
#submit_element(element)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 438
def submit_element(element) script = "/* submitForm */ var form = arguments[0];\n" \ "while (form.nodeName != \"FORM\" && form.parentNode) {\n " \ "form = form.parentNode;\n" \ "}\n" \ "if (!form) { throw Error('Unable to find containing form element'); }\n" \ "if (!form.ownerDocument) { throw Error('Unable to find owning document'); }\n" \ "var e = form.ownerDocument.createEvent('Event');\n" \ "e.initEvent('submit', true, true);\n" \ "if (form.dispatchEvent(e)) { HTMLFormElement.prototype.submit.call(form) }\n" execute_script(script, Bridge.element_class::ELEMENT_KEY => element) rescue Error::JavascriptError raise Error::UnsupportedOperationError, 'To submit an element, it must be nested inside a form element' end
#switch_to_active_element
Alias for #active_element.
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 539
alias switch_to_active_element active_element
#switch_to_default_content
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 205
def switch_to_default_content switch_to_frame nil end
#switch_to_frame(id)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 196
def switch_to_frame(id) id = find_element_by('id', id) if id.is_a? String execute :switch_to_frame, {}, {id: id} end
#switch_to_parent_frame
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 201
def switch_to_parent_frame execute :switch_to_parent_frame end
#switch_to_window(name)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 192
def switch_to_window(name) execute :switch_to_window, {}, {handle: name} end
#title
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 170
def title execute :get_title end
#unwrap_script_result(arg) (private)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 696
def unwrap_script_result(arg) case arg when Array arg.map { |e| unwrap_script_result(e) } when Hash element_id = element_id_from(arg) return Bridge.element_class.new(self, element_id) if element_id shadow_root_id = shadow_root_id_from(arg) return ShadowRoot.new self, shadow_root_id if shadow_root_id arg.each { |k, v| arg[k] = unwrap_script_result(v) } else arg end end
#url
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 166
def url execute :get_current_url end
#user_verified(verified, authenticator_id)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 611
def user_verified(verified, authenticator_id) execute :set_user_verified, {authenticatorId: authenticator_id}, {isUserVerified: verified} end
#window_handle
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 234
def window_handle execute :get_window_handle end
#window_handles
window handling
# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 230
def window_handles execute :get_window_handles end
#window_position
[ GitHub ]#window_rect
[ GitHub ]#window_size(handle = :current)
[ GitHub ]# File 'rb/lib/selenium/webdriver/remote/bridge.rb', line 244
def window_size(handle = :current) unless handle == :current raise Error::UnsupportedOperationError, 'Switch to desired window before getting its size' end data = execute :get_window_rect Dimension.new data['width'], data['height'] end