Skip to content

Commit ac9e411

Browse files
committed
[py]: allow CDP and BiDi event callbacks to determine event triggering order
1 parent a603bed commit ac9e411

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

py/selenium/webdriver/remote/websocket_connection.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def __init__(self, url):
3939
self.url = url
4040

4141
self._id = 0
42+
self._sequence = 0
4243
self._messages = {}
4344
self._started = False
4445

@@ -78,12 +79,15 @@ def execute(self, command):
7879
return self._deserialize_result(result, command)
7980

8081
def add_callback(self, event, callback):
82+
self.add_callback_with_sequence(event, lambda _, x: callback(x))
83+
84+
def add_callback_with_sequence(self, event, callback):
8185
event_name = event.event_class
8286
if event_name not in self.callbacks:
8387
self.callbacks[event_name] = []
8488

85-
def _callback(params):
86-
callback(event.from_json(params))
89+
def _callback(sequence, params):
90+
callback(sequence, event.from_json(params))
8791

8892
self.callbacks[event_name].append(_callback)
8993
return id(_callback)
@@ -113,7 +117,8 @@ def on_open(ws):
113117
self._started = True
114118

115119
def on_message(ws, message):
116-
self._process_message(message)
120+
self._sequence += 1
121+
self._process_message(self._sequence, message)
117122

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

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

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

144149
def _wait_until(self, condition):
145150
timeout = self._response_wait_timeout

0 commit comments

Comments
 (0)