Class: Selenium::WebDriver::WebSocketConnection
- Inherits:
-
Object
- Object
- Selenium::WebDriver::WebSocketConnection
- Defined in:
- lib/selenium/webdriver/common/websocket_connection.rb
Constant Summary collapse
- CONNECTION_ERRORS =
[ Errno::ECONNRESET, # connection is aborted (browser process was killed) Errno::EPIPE # broken pipe (browser process was killed) ].freeze
- RESPONSE_WAIT_TIMEOUT =
30
- RESPONSE_WAIT_INTERVAL =
0.1
- MAX_LOG_MESSAGE_SIZE =
9999
Instance Method Summary collapse
- #add_callback(event, &block) ⇒ Object
- #callbacks ⇒ Object
- #close ⇒ Object
-
#initialize(url:) ⇒ WebSocketConnection
constructor
A new instance of WebSocketConnection.
- #remove_callback(event, id) ⇒ Object
- #send_cmd(**payload) ⇒ Object
Constructor Details
#initialize(url:) ⇒ WebSocketConnection
Returns a new instance of WebSocketConnection.
35 36 37 38 39 40 41 42 43 |
# File 'lib/selenium/webdriver/common/websocket_connection.rb', line 35 def initialize(url:) @callback_threads = ThreadGroup.new @session_id = nil @url = url process_handshake @socket_thread = attach_socket_listener end |
Instance Method Details
#add_callback(event, &block) ⇒ Object
55 56 57 58 |
# File 'lib/selenium/webdriver/common/websocket_connection.rb', line 55 def add_callback(event, &block) callbacks[event] << block block.object_id end |
#callbacks ⇒ Object
51 52 53 |
# File 'lib/selenium/webdriver/common/websocket_connection.rb', line 51 def callbacks @callbacks ||= Hash.new { |callbacks, event| callbacks[event] = [] } end |
#close ⇒ Object
45 46 47 48 49 |
# File 'lib/selenium/webdriver/common/websocket_connection.rb', line 45 def close @callback_threads.list.each(&:exit) @socket_thread.exit socket.close end |
#remove_callback(event, id) ⇒ Object
60 61 62 63 64 65 |
# File 'lib/selenium/webdriver/common/websocket_connection.rb', line 60 def remove_callback(event, id) return if callbacks[event].reject! { |callback| callback.object_id == id } ids = callbacks[event]&.map(&:object_id) raise Error::WebDriverError, "Callback with ID #{id} does not exist for event #{event}: #{ids}" end |
#send_cmd(**payload) ⇒ Object
67 68 69 70 71 72 73 74 75 76 |
# File 'lib/selenium/webdriver/common/websocket_connection.rb', line 67 def send_cmd(**payload) id = next_id data = payload.merge(id: id) WebDriver.logger.debug "WebSocket -> #{data}"[...MAX_LOG_MESSAGE_SIZE], id: :bidi data = JSON.generate(data) out_frame = WebSocket::Frame::Outgoing::Client.new(version: ws.version, data: data, type: 'text') socket.write(out_frame.to_s) wait.until { .delete(id) } end |