from playwright.sync_api import TimeoutError as PlaywrightTimeoutError try: from test.playwright.helpers._next_apps_helpers import ( RESULT_TIMEOUT_MS as DEFAULT_TIMEOUT_MS, ) except Exception: DEFAULT_TIMEOUT_MS = 15000 def wait_for_login_complete(page, timeout_ms: int | None = None) -> None: if timeout_ms is None: timeout_ms = DEFAULT_TIMEOUT_MS wait_js = """ () => { const path = window.location.pathname || ''; if (path.includes('/login')) return false; const token = localStorage.getItem('Token'); const auth = localStorage.getItem('Authorization'); return Boolean((token && token.length) || (auth && auth.length)); } """ try: page.wait_for_function(wait_js, timeout=timeout_ms) except PlaywrightTimeoutError as exc: url = page.url testids = [] try: testids = page.evaluate( """ () => Array.from(document.querySelectorAll('[data-testid]')) .map((el) => el.getAttribute('data-testid')) .filter((val) => val && /auth/i.test(val)) .slice(0, 30) """ ) except Exception: testids = [] raise AssertionError( f"Login did not complete within {timeout_ms}ms. url={url} auth_testids={testids}" ) from exc