Class: Selenium::WebDriver::Remote::Bridge Private
- Inherits:
-
Object
- Object
- Selenium::WebDriver::Remote::Bridge
- Includes:
- Atoms
- Defined in:
- lib/selenium/webdriver/remote/bridge/commands.rb,
lib/selenium/webdriver/remote/bridge.rb,
lib/selenium/webdriver/remote/bridge/locator_converter.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.
Direct Known Subclasses
Defined Under Namespace
Classes: LocatorConverter
Constant Summary collapse
- PORT =
4444- QUIT_ERRORS =
[IOError, EOFError, WebSocket::Error].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.
{ 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
Class Attribute Summary collapse
- .element_class ⇒ Object
-
.extra_commands ⇒ Object
readonly
Returns the value of attribute extra_commands.
- .locator_converter ⇒ Object
Instance Attribute Summary collapse
-
#capabilities ⇒ Object
readonly
Returns the value of attribute capabilities.
-
#file_detector ⇒ Object
Returns the value of attribute file_detector.
-
#http ⇒ Object
Returns the value of attribute http.
Class Method Summary collapse
Instance Method Summary collapse
-
#accept_alert ⇒ Object
alerts.
-
#action(async: false, devices: [], duration: 250) ⇒ Object
(also: #actions)
actions.
-
#active_element ⇒ Object
(also: #switch_to_active_element)
finding elements.
- #add_cookie(cookie) ⇒ Object
- #add_credential(credential, id) ⇒ Object
-
#add_virtual_authenticator(options) ⇒ Object
virtual-authenticator.
- #alert=(keys) ⇒ Object
- #alert_text ⇒ Object
- #bidi ⇒ Object
- #browser ⇒ Object
-
#cancel_fedcm_dialog ⇒ Object
federated-credential management.
- #clear_element(element) ⇒ Object
- #click_element(element) ⇒ Object
- #click_fedcm_dialog_button ⇒ Object
- #close ⇒ Object
- #command_list ⇒ Object
- #cookie(name) ⇒ Object
- #cookies ⇒ Object
-
#create_session(capabilities) ⇒ Object
Creates session.
- #credentials(authenticator_id) ⇒ Object
- #delete_all_cookies ⇒ Object
- #delete_cookie(name) ⇒ Object
- #dismiss_alert ⇒ Object
- #element_aria_label(element) ⇒ Object
- #element_aria_role(element) ⇒ Object
- #element_attribute(element, name) ⇒ Object
- #element_displayed?(element) ⇒ Boolean
- #element_dom_attribute(element, name) ⇒ Object
- #element_enabled?(element) ⇒ Boolean
- #element_location(element) ⇒ Object
- #element_location_once_scrolled_into_view(element) ⇒ Object
- #element_property(element, name) ⇒ Object
- #element_rect(element) ⇒ Object
- #element_screenshot(element) ⇒ Object
- #element_selected?(element) ⇒ Boolean
- #element_size(element) ⇒ Object
-
#element_tag_name(element) ⇒ Object
element properties.
- #element_text(element) ⇒ Object
- #element_value(element) ⇒ Object
- #element_value_of_css_property(element, prop) ⇒ Object
- #execute_async_script(script, *args) ⇒ Object
-
#execute_script(script, *args) ⇒ Object
javascript execution.
- #fedcm_account_list ⇒ Object
- #fedcm_delay(enabled) ⇒ Object
- #fedcm_dialog_type ⇒ Object
- #fedcm_subtitle ⇒ Object
- #fedcm_title ⇒ Object
- #find_element_by(how, what, parent_ref = []) ⇒ Object
- #find_elements_by(how, what, parent_ref = []) ⇒ Object
- #full_screen_window ⇒ Object
- #get(url) ⇒ Object
-
#go_back ⇒ Object
navigation.
- #go_forward ⇒ Object
-
#initialize(http_client:) ⇒ Bridge
constructor
private
A new instance of Bridge.
-
#manage ⇒ Object
cookies.
- #maximize_window(handle = :current) ⇒ Object
- #minimize_window ⇒ Object
-
#new_window(type) ⇒ Hash
Create a new top-level browsing context https://w3c.github.io/webdriver/#new-window.
- #page_source ⇒ Object
- #print_page(options = {}) ⇒ Object
- #quit ⇒ Object
- #refresh ⇒ Object
- #release_actions ⇒ Object
- #remove_all_credentials(authenticator_id) ⇒ Object
- #remove_credential(credential_id, authenticator_id) ⇒ Object
- #remove_virtual_authenticator(id) ⇒ Object
- #reposition_window(x, y) ⇒ Object
- #reset_fedcm_cooldown ⇒ Object
- #resize_window(width, height, handle = :current) ⇒ Object
- #screenshot ⇒ Object
- #select_fedcm_account(index) ⇒ Object
- #send_actions(data) ⇒ Object
- #send_keys_to_element(element, keys) ⇒ Object
-
#session_id ⇒ Object
Returns the current session ID.
- #set_window_rect(x: nil, y: nil, width: nil, height: nil) ⇒ Object
- #shadow_root(element) ⇒ Object
- #status ⇒ Object
- #submit_element(element) ⇒ Object
- #switch_to_default_content ⇒ Object
- #switch_to_frame(id) ⇒ Object
- #switch_to_parent_frame ⇒ Object
- #switch_to_window(name) ⇒ Object
-
#timeouts ⇒ Object
timeouts.
- #timeouts=(timeouts) ⇒ Object
- #title ⇒ Object
- #transport ⇒ Object
- #url ⇒ Object
- #user_verified(verified, authenticator_id) ⇒ Object
- #window_handle ⇒ Object
-
#window_handles ⇒ Object
window handling.
- #window_position ⇒ Object
- #window_rect ⇒ Object
- #window_size(handle = :current) ⇒ Object
Methods included from Atoms
Constructor Details
#initialize(http_client:) ⇒ 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.
Returns a new instance of Bridge.
58 59 60 61 62 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 58 def initialize(http_client:) @http = http_client @file_detector = nil @locator_converter = self.class.locator_converter end |
Class Attribute Details
.element_class ⇒ Object
48 49 50 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 48 def element_class @element_class ||= Element end |
.extra_commands ⇒ Object (readonly)
Returns the value of attribute extra_commands.
35 36 37 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 35 def extra_commands @extra_commands end |
.locator_converter ⇒ Object
44 45 46 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 44 def locator_converter @locator_converter ||= LocatorConverter.new end |
Instance Attribute Details
#capabilities ⇒ Object (readonly)
Returns the value of attribute capabilities.
32 33 34 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 32 def capabilities @capabilities end |
#file_detector ⇒ Object
Returns the value of attribute file_detector.
31 32 33 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 31 def file_detector @file_detector end |
#http ⇒ Object
Returns the value of attribute http.
31 32 33 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 31 def http @http end |
Class Method Details
.add_command(name, verb, url, &block) ⇒ Object
38 39 40 41 42 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 38 def add_command(name, verb, url, &block) @extra_commands ||= {} @extra_commands[name] = [verb, url] define_method(name, &block) end |
Instance Method Details
#accept_alert ⇒ Object
alerts
131 132 133 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 131 def accept_alert execute :accept_alert end |
#action(async: false, devices: [], duration: 250) ⇒ Object Also known as: actions
actions
348 349 350 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 348 def action(async: false, devices: [], duration: 250) ActionBuilder.new self, async: async, devices: devices, duration: duration end |
#active_element ⇒ Object Also known as: switch_to_active_element
finding elements
476 477 478 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 476 def active_element Bridge.element_class.new self, element_id_from(execute(:get_active_element)) end |
#add_cookie(cookie) ⇒ Object
322 323 324 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 322 def () execute :add_cookie, {}, {cookie: } end |
#add_credential(credential, id) ⇒ Object
536 537 538 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 536 def add_credential(credential, id) execute :add_credential, {authenticatorId: id}, credential end |
#add_virtual_authenticator(options) ⇒ Object
virtual-authenticator
527 528 529 530 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 527 def add_virtual_authenticator() authenticator_id = execute :add_virtual_authenticator, {}, .as_json VirtualAuthenticator.new(self, authenticator_id, ) end |
#alert=(keys) ⇒ Object
139 140 141 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 139 def alert=(keys) execute :send_alert_text, {}, {value: keys.chars, text: keys} end |
#alert_text ⇒ Object
143 144 145 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 143 def alert_text execute :get_alert_text end |
#bidi ⇒ Object
596 597 598 599 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 596 def bidi msg = 'BiDi must be enabled by setting #web_socket_url to true in options class' raise(WebDriver::Error::WebDriverError, msg) end |
#browser ⇒ Object
100 101 102 103 104 105 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 100 def browser @browser ||= begin name = @capabilities.browser_name name ? name.tr(' -', '_').downcase.to_sym : 'unknown' end end |
#cancel_fedcm_dialog ⇒ Object
federated-credential management
560 561 562 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 560 def cancel_fedcm_dialog execute :cancel_fedcm_dialog end |
#clear_element(element) ⇒ Object
375 376 377 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 375 def clear_element(element) execute :element_clear, id: element end |
#click_element(element) ⇒ Object
365 366 367 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 365 def click_element(element) execute :element_click, id: element end |
#click_fedcm_dialog_button ⇒ Object
592 593 594 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 592 def execute :click_fedcm_dialog_button, {}, {dialogButton: 'ConfirmIdpLoginContinue'} end |
#close ⇒ Object
219 220 221 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 219 def close execute :close_window end |
#command_list ⇒ Object
606 607 608 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 606 def command_list COMMANDS end |
#cookie(name) ⇒ Object
332 333 334 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 332 def (name) execute :get_cookie, name: name end |
#cookies ⇒ Object
336 337 338 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 336 def execute :get_all_cookies end |
#create_session(capabilities) ⇒ Object
Creates session.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 68 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) ⇒ Object
540 541 542 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 540 def credentials(authenticator_id) execute :get_credentials, {authenticatorId: authenticator_id} end |
#delete_all_cookies ⇒ Object
340 341 342 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 340 def execute :delete_all_cookies end |
#delete_cookie(name) ⇒ Object
326 327 328 329 330 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 326 def (name) raise ArgumentError, 'Cookie name cannot be null or empty' if name.nil? || name.to_s.strip.empty? execute :delete_cookie, name: name end |
#dismiss_alert ⇒ Object
135 136 137 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 135 def dismiss_alert execute :dismiss_alert end |
#element_aria_label(element) ⇒ Object
420 421 422 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 420 def element_aria_label(element) execute :get_element_aria_label, id: element end |
#element_aria_role(element) ⇒ Object
416 417 418 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 416 def element_aria_role(element) execute :get_element_aria_role, id: element end |
#element_attribute(element, name) ⇒ Object
403 404 405 406 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 403 def element_attribute(element, name) WebDriver.logger.debug "Using script for :getAttribute of #{name}", id: :script execute_atom :getAttribute, element, name end |
#element_displayed?(element) ⇒ Boolean
463 464 465 466 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 463 def element_displayed?(element) WebDriver.logger.debug 'Using script for :isDisplayed', id: :script execute_atom :isDisplayed, element end |
#element_dom_attribute(element, name) ⇒ Object
408 409 410 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 408 def element_dom_attribute(element, name) execute :get_element_attribute, id: element, name: name end |
#element_enabled?(element) ⇒ Boolean
455 456 457 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 455 def element_enabled?(element) execute :is_element_enabled, id: element end |
#element_location(element) ⇒ Object
432 433 434 435 436 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 432 def element_location(element) data = execute :get_element_rect, id: element Point.new data['x'], data['y'] end |
#element_location_once_scrolled_into_view(element) ⇒ Object
444 445 446 447 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 444 def element_location_once_scrolled_into_view(element) send_keys_to_element(element, ['']) element_location(element) end |
#element_property(element, name) ⇒ Object
412 413 414 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 412 def element_property(element, name) execute :get_element_property, id: element, name: name end |
#element_rect(element) ⇒ Object
438 439 440 441 442 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 438 def element_rect(element) data = execute :get_element_rect, id: element Rectangle.new data['x'], data['y'], data['width'], data['height'] end |
#element_screenshot(element) ⇒ Object
296 297 298 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 296 def element_screenshot(element) execute :take_element_screenshot, id: element end |
#element_selected?(element) ⇒ Boolean
459 460 461 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 459 def element_selected?(element) execute :is_element_selected, id: element end |
#element_size(element) ⇒ Object
449 450 451 452 453 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 449 def element_size(element) data = execute :get_element_rect, id: element Dimension.new data['width'], data['height'] end |
#element_tag_name(element) ⇒ Object
element properties
399 400 401 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 399 def element_tag_name(element) execute :get_element_tag_name, id: element end |
#element_text(element) ⇒ Object
428 429 430 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 428 def element_text(element) execute :get_element_text, id: element end |
#element_value(element) ⇒ Object
424 425 426 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 424 def element_value(element) element_property element, 'value' end |
#element_value_of_css_property(element, prop) ⇒ Object
468 469 470 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 468 def element_value_of_css_property(element, prop) execute :get_element_css_value, id: element, property_name: prop end |
#execute_async_script(script, *args) ⇒ Object
309 310 311 312 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 309 def execute_async_script(script, *args) result = execute :execute_async_script, {}, {script: script, args: args} unwrap_script_result result end |
#execute_script(script, *args) ⇒ Object
javascript execution
304 305 306 307 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 304 def execute_script(script, *args) result = execute :execute_script, {}, {script: script, args: args} unwrap_script_result result end |
#fedcm_account_list ⇒ Object
580 581 582 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 580 def fedcm_account_list execute :get_fedcm_account_list end |
#fedcm_delay(enabled) ⇒ Object
584 585 586 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 584 def fedcm_delay(enabled) execute :set_fedcm_delay, {}, {enabled: enabled} end |
#fedcm_dialog_type ⇒ Object
568 569 570 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 568 def fedcm_dialog_type execute :get_fedcm_dialog_type end |
#fedcm_subtitle ⇒ Object
576 577 578 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 576 def fedcm_subtitle execute(:get_fedcm_title).fetch('subtitle', nil) end |
#fedcm_title ⇒ Object
572 573 574 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 572 def fedcm_title execute(:get_fedcm_title).fetch('title') end |
#find_element_by(how, what, parent_ref = []) ⇒ Object
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 482 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 = []) ⇒ Object
500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 500 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 ⇒ Object
268 269 270 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 268 def full_screen_window execute :fullscreen_window end |
#get(url) ⇒ Object
111 112 113 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 111 def get(url) execute :get, {}, {url: url} end |
#go_back ⇒ Object
navigation
151 152 153 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 151 def go_back execute :back end |
#go_forward ⇒ Object
155 156 157 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 155 def go_forward execute :forward end |
#manage ⇒ Object
cookies
318 319 320 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 318 def manage @manage ||= WebDriver::Manager.new(self) end |
#maximize_window(handle = :current) ⇒ Object
259 260 261 262 263 264 265 266 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 259 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 ⇒ Object
255 256 257 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 255 def minimize_window execute :minimize_window end |
#new_window(type) ⇒ Hash
Create a new top-level browsing context https://w3c.github.io/webdriver/#new-window
181 182 183 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 181 def new_window(type) execute :new_window, {}, {type: type} end |
#page_source ⇒ Object
167 168 169 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 167 def page_source execute :get_page_source end |
#print_page(options = {}) ⇒ Object
361 362 363 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 361 def print_page( = {}) execute :print_page, {}, {options: } end |
#quit ⇒ Object
204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 204 def quit begin execute :delete_session rescue *QUIT_ERRORS => e WebDriver.logger.debug "delete_session failed during quit: #{e.class}: #{e.}", id: :quit ensure begin http.close rescue *QUIT_ERRORS => e WebDriver.logger.debug "http.close failed during quit: #{e.class}: #{e.}", id: :quit end end nil end |
#refresh ⇒ Object
223 224 225 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 223 def refresh execute :refresh end |
#release_actions ⇒ Object
357 358 359 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 357 def release_actions execute :release_actions end |
#remove_all_credentials(authenticator_id) ⇒ Object
548 549 550 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 548 def remove_all_credentials(authenticator_id) execute :remove_all_credentials, {authenticatorId: authenticator_id} end |
#remove_credential(credential_id, authenticator_id) ⇒ Object
544 545 546 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 544 def remove_credential(credential_id, authenticator_id) execute :remove_credential, {credentialId: credential_id, authenticatorId: authenticator_id} end |
#remove_virtual_authenticator(id) ⇒ Object
532 533 534 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 532 def remove_virtual_authenticator(id) execute :remove_virtual_authenticator, {authenticatorId: id} end |
#reposition_window(x, y) ⇒ Object
272 273 274 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 272 def reposition_window(x, y) set_window_rect(x: x, y: y) end |
#reset_fedcm_cooldown ⇒ Object
588 589 590 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 588 def reset_fedcm_cooldown execute :reset_fedcm_cooldown end |
#resize_window(width, height, handle = :current) ⇒ Object
239 240 241 242 243 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 239 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 ⇒ Object
292 293 294 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 292 def screenshot execute :take_screenshot end |
#select_fedcm_account(index) ⇒ Object
564 565 566 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 564 def select_fedcm_account(index) execute :select_fedcm_account, {}, {accountIndex: index} end |
#send_actions(data) ⇒ Object
353 354 355 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 353 def send_actions(data) execute :actions, {}, {actions: data} end |
#send_keys_to_element(element, keys) ⇒ Object
369 370 371 372 373 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 369 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 ⇒ Object
Returns the current session ID.
96 97 98 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 96 def session_id @session_id || raise(Error::WebDriverError, 'no current session exists') end |
#set_window_rect(x: nil, y: nil, width: nil, height: nil) ⇒ Object
281 282 283 284 285 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 281 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) ⇒ Object
518 519 520 521 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 518 def shadow_root(element) id = execute :get_element_shadow_root, id: element ShadowRoot.new self, shadow_root_id_from(id) end |
#status ⇒ Object
107 108 109 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 107 def status execute :status end |
#submit_element(element) ⇒ Object
379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 379 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_default_content ⇒ Object
198 199 200 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 198 def switch_to_default_content switch_to_frame nil end |
#switch_to_frame(id) ⇒ Object
189 190 191 192 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 189 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 ⇒ Object
194 195 196 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 194 def switch_to_parent_frame execute :switch_to_parent_frame end |
#switch_to_window(name) ⇒ Object
185 186 187 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 185 def switch_to_window(name) execute :switch_to_window, {}, {handle: name} end |
#timeouts ⇒ Object
timeouts
119 120 121 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 119 def timeouts execute :get_timeouts, {} end |
#timeouts=(timeouts) ⇒ Object
123 124 125 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 123 def timeouts=(timeouts) execute :set_timeout, {}, timeouts end |
#title ⇒ Object
163 164 165 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 163 def title execute :get_title end |
#transport ⇒ Object
601 602 603 604 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 601 def transport msg = 'BiDi must be enabled by setting #web_socket_url to true in options class' raise(WebDriver::Error::WebDriverError, msg) end |
#url ⇒ Object
159 160 161 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 159 def url execute :get_current_url end |
#user_verified(verified, authenticator_id) ⇒ Object
552 553 554 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 552 def user_verified(verified, authenticator_id) execute :set_user_verified, {authenticatorId: authenticator_id}, {isUserVerified: verified} end |
#window_handle ⇒ Object
235 236 237 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 235 def window_handle execute :get_window_handle end |
#window_handles ⇒ Object
window handling
231 232 233 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 231 def window_handles execute :get_window_handles end |
#window_position ⇒ Object
276 277 278 279 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 276 def window_position data = execute :get_window_rect Point.new data['x'], data['y'] end |
#window_rect ⇒ Object
287 288 289 290 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 287 def window_rect data = execute :get_window_rect Rectangle.new data['x'], data['y'], data['width'], data['height'] end |
#window_size(handle = :current) ⇒ Object
245 246 247 248 249 250 251 252 253 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 245 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 |