From 8005ce7db93af3605091e698742460da6866b0b8 Mon Sep 17 00:00:00 2001 From: Edgar Arakelyan Date: Tue, 3 Nov 2026 21:05:40 -0800 Subject: [PATCH] fix(computer): a screenshot while a dialog is open is its tab's last frame at once The page can't paint while a JavaScript dialog is open, so each capture waited out its 3 s timeout before falling back to the last frame. The control knows the dialog is open, so it doesn't ask. Co-Authored-By: Claude Opus 5.5 --- .../agentenv-protocol/src/agentenv_protocol/website_browser.py | 3 +++ packages/agentenv-protocol/tests/test_website_browser.py | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/agentenv-protocol/src/agentenv_protocol/website_browser.py b/packages/agentenv-protocol/src/agentenv_protocol/website_browser.py index d88120714..21fa70b74 100644 --- a/packages/agentenv-protocol/src/agentenv_protocol/website_browser.py +++ b/packages/agentenv-protocol/src/agentenv_protocol/website_browser.py @@ -430,7 +430,10 @@ async def capture_page(self) -> dict: return {**({"png": png} if png is not None else {"blank": True}), "page": self._state_of(target)} async def _capture(self, session: str) -> Optional[str]: + """The tab's page as it shows now; with a dialog open on it, which keeps it from painting, the last it took.""" target = self._sessions[session] + if session in self._open_dialogs: + return self._shots.get(target) navigated = self.tabs.get(target, {}).get("url") try: shot = await self.devtools.call("Page.captureScreenshot", {"format": "png", "optimizeForSpeed": True}, diff --git a/packages/agentenv-protocol/tests/test_website_browser.py b/packages/agentenv-protocol/tests/test_website_browser.py index 6ae0861fd..80fd9e910 100644 --- a/packages/agentenv-protocol/tests/test_website_browser.py +++ b/packages/agentenv-protocol/tests/test_website_browser.py @@ -782,7 +782,7 @@ async def call(self, method, params=None, *, session_id=None, timeout_s=None): @pytest.mark.asyncio -async def test_while_a_dialog_keeps_its_page_from_painting_its_capture_is_the_last_it_took(): +async def test_while_a_dialog_keeps_its_page_from_painting_its_capture_is_the_last_it_took_without_waiting_on_it(): devtools = Tabbed() control = await _tabs(devtools, "a") before = await control.capture() @@ -790,6 +790,7 @@ async def test_while_a_dialog_keeps_its_page_from_painting_its_capture_is_the_la devtools.send("Page.javascriptDialogOpening", {"type": "alert", "message": "Saved"}, session="s-a") assert before == "png of s-a" and await control.capture() == "png of s-a" + assert len(devtools.timeouts) == 1 @pytest.mark.asyncio