Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions py/selenium/webdriver/remote/websocket_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def __init__(self, url):
self.url = url

self._id = 0
self._sequence = 0
self._messages = {}
self._started = False

Expand Down Expand Up @@ -78,12 +79,15 @@ def execute(self, command):
return self._deserialize_result(result, command)

def add_callback(self, event, callback):
return self.add_callback_with_sequence(event, lambda _, x: callback(x))

def add_callback_with_sequence(self, event, callback):
event_name = event.event_class
if event_name not in self.callbacks:
self.callbacks[event_name] = []

def _callback(params):
callback(event.from_json(params))
def _callback(sequence, params):
callback(sequence, event.from_json(params))

self.callbacks[event_name].append(_callback)
return id(_callback)
Expand Down Expand Up @@ -113,7 +117,8 @@ def on_open(ws):
self._started = True

def on_message(ws, message):
self._process_message(message)
self._sequence += 1
self._process_message(self._sequence, message)

def on_error(ws, error):
logger.debug(f"error: {error}")
Expand All @@ -129,7 +134,7 @@ def run_socket():
self._ws_thread = Thread(target=run_socket)
self._ws_thread.start()

def _process_message(self, message):
def _process_message(self, sequence, message):
message = json.loads(message)
logger.debug(f"<- {message}"[: self._max_log_message_size])

Expand All @@ -139,7 +144,7 @@ def _process_message(self, message):
if "method" in message:
params = message["params"]
for callback in self.callbacks.get(message["method"], []):
Thread(target=callback, args=(params,)).start()
Thread(target=callback, args=(sequence, params)).start()

def _wait_until(self, condition):
timeout = self._response_wait_timeout
Expand Down