Skip to content

Commit 7bf8b24

Browse files
cursoragentP4X-ng
andcommitted
Fix execute_many tests for async response timing
Co-authored-by: P4x-ng <P4X-ng@users.noreply.github.com>
1 parent a4bdd5b commit 7bf8b24

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

test/test_connection.py

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -216,18 +216,21 @@ async def test_execute_many_success():
216216
"""Test execute_many returns ordered command results."""
217217
mock_ws = MockWebSocket()
218218

219-
# Queue responses in reverse order to verify request multiplexing.
220-
mock_ws.queue_message({"id": 2, "result": {"result": {"type": "number", "value": 2}}})
221-
mock_ws.queue_message({"id": 1, "result": {"result": {"type": "number", "value": 1}}})
222-
223219
with patch('cdp.connection.websockets.connect', new_callable=AsyncMock) as mock_connect:
224220
mock_connect.return_value = mock_ws
225221

226222
async with CDPConnection("ws://localhost:9222/test") as conn:
227-
results = await conn.execute_many([
223+
task = asyncio.create_task(conn.execute_many([
228224
runtime.evaluate(expression="1"),
229225
runtime.evaluate(expression="2"),
230-
])
226+
]))
227+
await asyncio.sleep(0.05)
228+
229+
# Queue responses in reverse order to verify request multiplexing.
230+
mock_ws.queue_message({"id": 2, "result": {"result": {"type": "number", "value": 2}}})
231+
mock_ws.queue_message({"id": 1, "result": {"result": {"type": "number", "value": 1}}})
232+
233+
results = await task
231234

232235
assert len(results) == 2
233236
assert isinstance(results[0][0], runtime.RemoteObject)
@@ -242,21 +245,24 @@ async def test_execute_many_return_exceptions():
242245
"""Test execute_many can collect exceptions instead of raising."""
243246
mock_ws = MockWebSocket()
244247

245-
# First command succeeds, second command fails.
246-
mock_ws.queue_message({"id": 1, "result": {"result": {"type": "number", "value": 1}}})
247-
mock_ws.queue_message({"id": 2, "error": {"code": -32602, "message": "Invalid params"}})
248-
249248
with patch('cdp.connection.websockets.connect', new_callable=AsyncMock) as mock_connect:
250249
mock_connect.return_value = mock_ws
251250

252251
async with CDPConnection("ws://localhost:9222/test") as conn:
253-
results = await conn.execute_many(
252+
task = asyncio.create_task(conn.execute_many(
254253
[
255254
runtime.evaluate(expression="1"),
256255
page.navigate(url="https://example.com"),
257256
],
258257
return_exceptions=True,
259-
)
258+
))
259+
await asyncio.sleep(0.05)
260+
261+
# First command succeeds, second command fails.
262+
mock_ws.queue_message({"id": 1, "result": {"result": {"type": "number", "value": 1}}})
263+
mock_ws.queue_message({"id": 2, "error": {"code": -32602, "message": "Invalid params"}})
264+
265+
results = await task
260266

261267
assert len(results) == 2
262268
assert isinstance(results[0][0], runtime.RemoteObject)
@@ -269,14 +275,18 @@ async def test_execute_many_return_exceptions():
269275
async def test_execute_many_raises_first_exception_by_default():
270276
"""Test execute_many raises command errors by default."""
271277
mock_ws = MockWebSocket()
272-
mock_ws.queue_message({"id": 1, "error": {"code": -32000, "message": "Command failed"}})
273278

274279
with patch('cdp.connection.websockets.connect', new_callable=AsyncMock) as mock_connect:
275280
mock_connect.return_value = mock_ws
276281

277282
async with CDPConnection("ws://localhost:9222/test") as conn:
278283
with pytest.raises(CDPCommandError) as exc_info:
279-
await conn.execute_many([page.navigate(url="https://example.com")])
284+
task = asyncio.create_task(
285+
conn.execute_many([page.navigate(url="https://example.com")])
286+
)
287+
await asyncio.sleep(0.05)
288+
mock_ws.queue_message({"id": 1, "error": {"code": -32000, "message": "Command failed"}})
289+
await task
280290
assert exc_info.value.code == -32000
281291

282292

0 commit comments

Comments
 (0)