page wait load timeout and fix

This commit is contained in:
Martin Pitt 2024-07-23 08:26:05 +02:00
parent 4c18ab08b0
commit 6cd41a5cc5

17
bidi.py
View file

@ -19,6 +19,10 @@ class WebdriverError(RuntimeError):
pass pass
# default timeout
TIMEOUT = 5 # TODO: raise to 15
@dataclass @dataclass
class LogMessage: class LogMessage:
level: str # like "info" level: str # like "info"
@ -140,9 +144,11 @@ class WebdriverBidi:
self.logs.append(LogMessage(data["params"])) self.logs.append(LogMessage(data["params"]))
continue continue
if data["method"] == "browsingContext.domContentLoaded": if data["method"] == "browsingContext.domContentLoaded":
logger.debug("page loaded: %r", data["params"])
if self.future_wait_page_load: if self.future_wait_page_load:
logger.debug("page loaded: %r, resolving wait page load future", data["params"])
self.future_wait_page_load.set_result(data["params"]["url"]) self.future_wait_page_load.set_result(data["params"]["url"])
else:
logger.debug("page loaded: %r (not awaited)", data["params"])
continue continue
logger.warning("ws_reader: unhandled message %r", data) logger.warning("ws_reader: unhandled message %r", data)
@ -165,9 +171,14 @@ class WebdriverBidi:
assert self.future_wait_page_load is None, "already waiting for page load" assert self.future_wait_page_load is None, "already waiting for page load"
self.future_wait_page_load = asyncio.get_event_loop().create_future() self.future_wait_page_load = asyncio.get_event_loop().create_future()
async def wait_page_load(self): async def wait_page_load(self, timeout: int = TIMEOUT) -> str:
assert self.future_wait_page_load is not None, "call arm_page_load() first" assert self.future_wait_page_load is not None, "call arm_page_load() first"
return await self.future_wait_page_load try:
url = await asyncio.wait_for(self.future_wait_page_load, timeout=timeout)
self.future_wait_page_load = None
return url
except asyncio.TimeoutError as e:
raise ValueError("timed out waiting for page load") from e
# #
# High-level helpers # High-level helpers