diff --git a/playwright/_impl/_connection.py b/playwright/_impl/_connection.py
index 57a9dcf6d..dd6e054aa 100644
--- a/playwright/_impl/_connection.py
+++ b/playwright/_impl/_connection.py
@@ -143,21 +143,13 @@ async def _inner_send(
callback = self._connection._send_message_to_server(
self._object, method, augmented_params, timeout
)
- try:
- done, _ = await asyncio.wait(
- {
- self._connection._transport.on_error_future,
- callback.future,
- },
- return_when=asyncio.FIRST_COMPLETED,
- )
- except asyncio.CancelledError as exc:
- await self._connection._abort(
- self._object,
- callback,
- str(exc) or "Task was cancelled",
- )
- raise
+ done, _ = await asyncio.wait(
+ {
+ self._connection._transport.on_error_future,
+ callback.future,
+ },
+ return_when=asyncio.FIRST_COMPLETED,
+ )
if not callback.future.done():
callback.future.cancel()
result = next(iter(done)).result()
@@ -249,10 +241,7 @@ def remove_listener(self, event: str, f: Any) -> None:
class ProtocolCallback:
- def __init__(
- self, loop: asyncio.AbstractEventLoop, id: int, no_reply: bool = False
- ) -> None:
- self.id = id
+ def __init__(self, loop: asyncio.AbstractEventLoop, no_reply: bool = False) -> None:
self.stack_trace: traceback.StackSummary
self.no_reply = no_reply
self.future = loop.create_future()
@@ -404,7 +393,7 @@ def _send_message_to_server(
)
self._last_id += 1
id = self._last_id
- callback = ProtocolCallback(self._loop, id, no_reply=no_reply)
+ callback = ProtocolCallback(self._loop, no_reply=no_reply)
task = asyncio.current_task(self._loop)
callback.stack_trace = cast(
traceback.StackSummary,
@@ -449,34 +438,6 @@ def _send_message_to_server(
return callback
- async def _abort(
- self, object: ChannelOwner, callback: ProtocolCallback, reason: str
- ) -> None:
- try:
- self._transport.send(
- {
- "guid": object._guid,
- "method": "__abort__",
- "params": {"id": callback.id, "reason": reason},
- }
- )
- except (Error, OSError):
- pass
- try:
- done, _ = await asyncio.wait(
- {
- self._transport.on_error_future,
- callback.future,
- },
- return_when=asyncio.FIRST_COMPLETED,
- )
- finally:
- if not callback.future.done():
- callback.future.cancel()
- for future in done:
- if not future.cancelled():
- future.exception()
-
def dispatch(self, msg: ParsedMessagePayload) -> None:
if self._closed_error:
return
diff --git a/tests/async/test_asyncio.py b/tests/async/test_asyncio.py
index 2c90cb494..3d8eb56f6 100644
--- a/tests/async/test_asyncio.py
+++ b/tests/async/test_asyncio.py
@@ -27,8 +27,7 @@
async def test_should_cancel_underlying_protocol_calls(
- browser_name: str,
- launch_arguments: Dict,
+ browser_name: str, launch_arguments: Dict
) -> None:
handler_exception = None
@@ -41,23 +40,12 @@ def exception_handler(loop: asyncio.AbstractEventLoop, context: Dict) -> None:
async with async_playwright() as p:
browser = await p[browser_name].launch(**launch_arguments)
page = await browser.new_page()
- await page.set_content(
- """
-
-
- """
- )
- task = asyncio.create_task(page.locator("button").click(timeout=0))
- await page.wait_for_timeout(100)
- assert not task.done()
-
+ task = asyncio.create_task(page.wait_for_selector("will-never-find"))
+ # make sure that the wait_for_selector message was sent to the server (driver)
+ await asyncio.sleep(0.1)
task.cancel()
with pytest.raises(asyncio.CancelledError):
await task
-
- await page.locator("button").evaluate("button => button.disabled = false")
- await page.wait_for_timeout(700)
- assert not await page.evaluate("window.clicked")
await browser.close()
# The actual 'Future exception was never retrieved' is logged inside the Future destructor (__del__).