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
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.
Constant Summary collapse
- PORT =
4444- QUIT_ERRORS =
[IOError].freeze
- COMMANDS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
{ 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'], # # server extensions # upload_file: [:post, 'session/:session_id/se/file'], # # 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'] }.freeze
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.
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
- #browser ⇒ Object
- #clear_element(element) ⇒ Object
- #clear_local_storage ⇒ Object
- #clear_session_storage ⇒ Object
- #click_element(element) ⇒ Object
- #close ⇒ 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.
- #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(url:, http_client: nil) ⇒ Bridge
constructor
private
Initializes the bridge with the given server URL.
-
#local_storage_item(key, value = nil) ⇒ Object
HTML 5.
- #local_storage_keys ⇒ Object
- #local_storage_size ⇒ Object
-
#manage ⇒ Object
cookies.
- #maximize_window(handle = :current) ⇒ Object
- #minimize_window ⇒ Object
-
#new_window(type) ⇒ Hash
Create a new top-level browsing context 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_local_storage_item(key) ⇒ Object
- #remove_session_storage_item(key) ⇒ Object
- #remove_virtual_authenticator(id) ⇒ Object
- #reposition_window(x, y) ⇒ Object
- #resize_window(width, height, handle = :current) ⇒ Object
- #screenshot ⇒ Object
- #send_actions(data) ⇒ Object
- #send_keys_to_element(element, keys) ⇒ Object
-
#session_id ⇒ Object
Returns the current session ID.
- #session_storage_item(key, value = nil) ⇒ Object
- #session_storage_keys ⇒ Object
- #session_storage_size ⇒ Object
- #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
- #upload(local_file) ⇒ 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
Constructor Details
#initialize(url:, http_client: nil) ⇒ 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
39 40 41 42 43 44 45 46 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 39 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 end |
Instance Attribute Details
#capabilities ⇒ Object (readonly)
Returns the value of attribute capabilities.
30 31 32 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 30 def capabilities @capabilities end |
#file_detector ⇒ Object
Returns the value of attribute file_detector.
29 30 31 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 29 def file_detector @file_detector end |
#http ⇒ Object
Returns the value of attribute http.
29 30 31 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 29 def http @http end |
Instance Method Details
#accept_alert ⇒ Object
alerts
113 114 115 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 113 def accept_alert execute :accept_alert end |
#action(async: false, devices: [], duration: 250) ⇒ Object Also known as: actions
actions
372 373 374 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 372 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
518 519 520 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 518 def active_element Element.new self, element_id_from(execute(:get_active_element)) end |
#add_cookie(cookie) ⇒ Object
348 349 350 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 348 def () execute :add_cookie, {}, {cookie: } end |
#add_credential(credential, id) ⇒ Object
578 579 580 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 578 def add_credential(credential, id) execute :add_credential, {authenticatorId: id}, credential end |
#add_virtual_authenticator(options) ⇒ Object
virtual-authenticator
569 570 571 572 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 569 def add_virtual_authenticator() authenticator_id = execute :add_virtual_authenticator, {}, .as_json VirtualAuthenticator.new(self, authenticator_id, ) end |
#alert=(keys) ⇒ Object
121 122 123 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 121 def alert=(keys) execute :send_alert_text, {}, {value: keys.chars, text: keys} end |
#alert_text ⇒ Object
125 126 127 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 125 def alert_text execute :get_alert_text end |
#browser ⇒ Object
82 83 84 85 86 87 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 82 def browser @browser ||= begin name = @capabilities.browser_name name ? name.tr(' ', '_').downcase.to_sym : 'unknown' end end |
#clear_element(element) ⇒ Object
417 418 419 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 417 def clear_element(element) execute :element_clear, id: element end |
#clear_local_storage ⇒ Object
294 295 296 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 294 def clear_local_storage execute_script('localStorage.clear()') end |
#clear_session_storage ⇒ Object
318 319 320 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 318 def clear_session_storage execute_script('sessionStorage.clear()') end |
#click_element(element) ⇒ Object
389 390 391 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 389 def click_element(element) execute :element_click, id: element end |
#close ⇒ Object
193 194 195 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 193 def close execute :close_window end |
#cookie(name) ⇒ Object
356 357 358 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 356 def (name) execute :get_cookie, name: name end |
#cookies ⇒ Object
360 361 362 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 360 def execute :get_all_cookies end |
#create_session(capabilities) ⇒ Object
Creates session.
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 52 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' extend(WebDriver::Chrome::Features) when 'firefox' extend(WebDriver::Firefox::Features) when 'msedge' extend(WebDriver::Edge::Features) when 'Safari', 'Safari Technology Preview' extend(WebDriver::Safari::Features) end end |
#credentials(authenticator_id) ⇒ Object
582 583 584 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 582 def credentials(authenticator_id) execute :get_credentials, {authenticatorId: authenticator_id} end |
#delete_all_cookies ⇒ Object
364 365 366 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 364 def execute :delete_all_cookies end |
#delete_cookie(name) ⇒ Object
352 353 354 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 352 def (name) execute :delete_cookie, name: name end |
#dismiss_alert ⇒ Object
117 118 119 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 117 def dismiss_alert execute :dismiss_alert end |
#element_aria_label(element) ⇒ Object
462 463 464 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 462 def element_aria_label(element) execute :get_element_aria_label, id: element end |
#element_aria_role(element) ⇒ Object
458 459 460 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 458 def element_aria_role(element) execute :get_element_aria_role, id: element end |
#element_attribute(element, name) ⇒ Object
445 446 447 448 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 445 def element_attribute(element, name) WebDriver.logger.info "Using script for :getAttribute of #{name}" execute_atom :getAttribute, element, name end |
#element_displayed?(element) ⇒ Boolean
505 506 507 508 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 505 def element_displayed?(element) WebDriver.logger.info 'Using script for :isDisplayed' execute_atom :isDisplayed, element end |
#element_dom_attribute(element, name) ⇒ Object
450 451 452 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 450 def element_dom_attribute(element, name) execute :get_element_attribute, id: element, name: name end |
#element_enabled?(element) ⇒ Boolean
497 498 499 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 497 def element_enabled?(element) execute :is_element_enabled, id: element end |
#element_location(element) ⇒ Object
474 475 476 477 478 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 474 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
486 487 488 489 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 486 def element_location_once_scrolled_into_view(element) send_keys_to_element(element, ['']) element_location(element) end |
#element_property(element, name) ⇒ Object
454 455 456 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 454 def element_property(element, name) execute :get_element_property, id: element, name: name end |
#element_rect(element) ⇒ Object
480 481 482 483 484 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 480 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
270 271 272 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 270 def element_screenshot(element) execute :take_element_screenshot, id: element end |
#element_selected?(element) ⇒ Boolean
501 502 503 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 501 def element_selected?(element) execute :is_element_selected, id: element end |
#element_size(element) ⇒ Object
491 492 493 494 495 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 491 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
441 442 443 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 441 def element_tag_name(element) execute :get_element_tag_name, id: element end |
#element_text(element) ⇒ Object
470 471 472 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 470 def element_text(element) execute :get_element_text, id: element end |
#element_value(element) ⇒ Object
466 467 468 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 466 def element_value(element) element_property element, 'value' end |
#element_value_of_css_property(element, prop) ⇒ Object
510 511 512 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 510 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
335 336 337 338 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 335 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
330 331 332 333 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 330 def execute_script(script, *args) result = execute :execute_script, {}, {script: script, args: args} unwrap_script_result result end |
#find_element_by(how, what, parent_ref = []) ⇒ Object
524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 524 def find_element_by(how, what, parent_ref = []) how, what = convert_locator(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 Element.new self, element_id_from(id) end |
#find_elements_by(how, what, parent_ref = []) ⇒ Object
542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 542 def find_elements_by(how, what, parent_ref = []) how, what = convert_locator(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| Element.new self, element_id_from(id) } end |
#full_screen_window ⇒ Object
242 243 244 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 242 def full_screen_window execute :fullscreen_window end |
#get(url) ⇒ Object
93 94 95 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 93 def get(url) execute :get, {}, {url: url} end |
#go_back ⇒ Object
navigation
133 134 135 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 133 def go_back execute :back end |
#go_forward ⇒ Object
137 138 139 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 137 def go_forward execute :forward end |
#local_storage_item(key, value = nil) ⇒ Object
HTML 5
278 279 280 281 282 283 284 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 278 def local_storage_item(key, value = nil) if value execute_script("localStorage.setItem('#{key}', '#{value}')") else execute_script("return localStorage.getItem('#{key}')") end end |
#local_storage_keys ⇒ Object
290 291 292 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 290 def local_storage_keys execute_script('return Object.keys(localStorage)') end |
#local_storage_size ⇒ Object
298 299 300 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 298 def local_storage_size execute_script('return localStorage.length') end |
#manage ⇒ Object
cookies
344 345 346 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 344 def manage @manage ||= WebDriver::Manager.new(self) end |
#maximize_window(handle = :current) ⇒ Object
233 234 235 236 237 238 239 240 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 233 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
229 230 231 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 229 def minimize_window execute :minimize_window end |
#new_window(type) ⇒ Hash
Create a new top-level browsing context w3c.github.io/webdriver/#new-window
163 164 165 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 163 def new_window(type) execute :new_window, {}, {type: type} end |
#page_source ⇒ Object
149 150 151 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 149 def page_source execute :get_page_source end |
#print_page(options = {}) ⇒ Object
385 386 387 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 385 def print_page( = {}) execute :print_page, {}, {options: } end |
#quit ⇒ Object
186 187 188 189 190 191 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 186 def quit execute :delete_session http.close rescue *QUIT_ERRORS nil end |
#refresh ⇒ Object
197 198 199 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 197 def refresh execute :refresh end |
#release_actions ⇒ Object
381 382 383 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 381 def release_actions execute :release_actions end |
#remove_all_credentials(authenticator_id) ⇒ Object
590 591 592 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 590 def remove_all_credentials(authenticator_id) execute :remove_all_credentials, {authenticatorId: authenticator_id} end |
#remove_credential(credential_id, authenticator_id) ⇒ Object
586 587 588 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 586 def remove_credential(credential_id, authenticator_id) execute :remove_credential, {credentialId: credential_id, authenticatorId: authenticator_id} end |
#remove_local_storage_item(key) ⇒ Object
286 287 288 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 286 def remove_local_storage_item(key) execute_script("localStorage.removeItem('#{key}')") end |
#remove_session_storage_item(key) ⇒ Object
310 311 312 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 310 def remove_session_storage_item(key) execute_script("sessionStorage.removeItem('#{key}')") end |
#remove_virtual_authenticator(id) ⇒ Object
574 575 576 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 574 def remove_virtual_authenticator(id) execute :remove_virtual_authenticator, {authenticatorId: id} end |
#reposition_window(x, y) ⇒ Object
246 247 248 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 246 def reposition_window(x, y) set_window_rect(x: x, y: y) end |
#resize_window(width, height, handle = :current) ⇒ Object
213 214 215 216 217 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 213 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
266 267 268 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 266 def screenshot execute :take_screenshot end |
#send_actions(data) ⇒ Object
377 378 379 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 377 def send_actions(data) execute :actions, {}, {actions: data} end |
#send_keys_to_element(element, keys) ⇒ Object
393 394 395 396 397 398 399 400 401 402 403 404 405 406 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 393 def send_keys_to_element(element, keys) # TODO: rework file detectors before Selenium 4.0 if @file_detector local_files = keys.first&.split("\n")&.map { |key| @file_detector.call(Array(key)) }&.compact if local_files&.any? keys = local_files.map { |local_file| upload(local_file) } keys = Array(keys.join("\n")) end end # Keep .split(//) for backward compatibility for now text = keys.join execute :element_send_keys, {id: element}, {value: text.chars, text: text} end |
#session_id ⇒ Object
Returns the current session ID.
78 79 80 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 78 def session_id @session_id || raise(Error::WebDriverError, 'no current session exists') end |
#session_storage_item(key, value = nil) ⇒ Object
302 303 304 305 306 307 308 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 302 def session_storage_item(key, value = nil) if value execute_script("sessionStorage.setItem('#{key}', '#{value}')") else execute_script("return sessionStorage.getItem('#{key}')") end end |
#session_storage_keys ⇒ Object
314 315 316 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 314 def session_storage_keys execute_script('return Object.keys(sessionStorage)') end |
#session_storage_size ⇒ Object
322 323 324 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 322 def session_storage_size execute_script('return sessionStorage.length') end |
#set_window_rect(x: nil, y: nil, width: nil, height: nil) ⇒ Object
255 256 257 258 259 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 255 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
560 561 562 563 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 560 def shadow_root(element) id = execute :get_element_shadow_root, id: element ShadowRoot.new self, shadow_root_id_from(id) end |
#status ⇒ Object
89 90 91 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 89 def status execute :status end |
#submit_element(element) ⇒ Object
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 421 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, Element::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
180 181 182 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 180 def switch_to_default_content switch_to_frame nil end |
#switch_to_frame(id) ⇒ Object
171 172 173 174 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 171 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
176 177 178 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 176 def switch_to_parent_frame execute :switch_to_parent_frame end |
#switch_to_window(name) ⇒ Object
167 168 169 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 167 def switch_to_window(name) execute :switch_to_window, {}, {handle: name} end |
#timeouts ⇒ Object
timeouts
101 102 103 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 101 def timeouts execute :get_timeouts, {} end |
#timeouts=(timeouts) ⇒ Object
105 106 107 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 105 def timeouts=(timeouts) execute :set_timeout, {}, timeouts end |
#title ⇒ Object
145 146 147 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 145 def title execute :get_title end |
#upload(local_file) ⇒ Object
408 409 410 411 412 413 414 415 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 408 def upload(local_file) unless File.file?(local_file) WebDriver.logger.debug("File detector only works with files. #{local_file.inspect} isn`t a file!") raise Error::WebDriverError, "You are trying to work with something that isn't a file." end execute :upload_file, {}, {file: Zipper.zip_file(local_file)} end |
#url ⇒ Object
141 142 143 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 141 def url execute :get_current_url end |
#user_verified(verified, authenticator_id) ⇒ Object
594 595 596 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 594 def user_verified(verified, authenticator_id) execute :set_user_verified, {authenticatorId: authenticator_id}, {isUserVerified: verified} end |
#window_handle ⇒ Object
209 210 211 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 209 def window_handle execute :get_window_handle end |
#window_handles ⇒ Object
window handling
205 206 207 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 205 def window_handles execute :get_window_handles end |
#window_position ⇒ Object
250 251 252 253 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 250 def window_position data = execute :get_window_rect Point.new data['x'], data['y'] end |
#window_rect ⇒ Object
261 262 263 264 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 261 def window_rect data = execute :get_window_rect Rectangle.new data['x'], data['y'], data['width'], data['height'] end |
#window_size(handle = :current) ⇒ Object
219 220 221 222 223 224 225 226 227 |
# File 'lib/selenium/webdriver/remote/bridge.rb', line 219 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 |