Files
ragflow/test/playwright/helpers/response_capture.py

35 lines
1.4 KiB
Python

try:
from test.playwright.helpers._auth_helpers import RESULT_TIMEOUT_MS as DEFAULT_TIMEOUT_MS
except Exception:
# Fallback for standalone usage when helper constants are unavailable.
DEFAULT_TIMEOUT_MS = 30_000
def capture_response(page, trigger, predicate, timeout_ms: int = DEFAULT_TIMEOUT_MS):
if hasattr(page, "expect_response"):
with page.expect_response(predicate, timeout=timeout_ms) as response_info:
trigger()
return response_info.value
if hasattr(page, "expect_event"):
with page.expect_event("response", predicate=predicate, timeout=timeout_ms) as response_info:
trigger()
return response_info.value
if hasattr(page, "wait_for_event"):
trigger()
return page.wait_for_event("response", predicate=predicate, timeout=timeout_ms)
raise RuntimeError("Playwright Page lacks expect_response/expect_event/wait_for_event.")
def capture_response_json(page, trigger, predicate, timeout_ms: int = DEFAULT_TIMEOUT_MS) -> dict:
response = capture_response(page, trigger, predicate, timeout_ms)
info: dict = {"__url__": response.url, "__status__": response.status}
try:
data = response.json()
if isinstance(data, dict):
info.update(data)
else:
info["__parse_error__"] = "non-dict response body"
except Exception as exc:
info["__parse_error__"] = str(exc)
return info