import type { Page } from '@playwright/test'; /** * Navigate within the Vue SPA without a full page reload. * Uses history.pushState + popstate to trigger Vue Router navigation, * preserving wallet connection state and reactive stores. * * For initial page loads, use page.goto() instead. */ export async function navigateSPA(page: Page, path: string): Promise { await page.evaluate((p) => { window.history.pushState({}, '', p); window.dispatchEvent(new PopStateEvent('popstate')); }, path); // waitForURL would resolve immediately (pushState already updated the URL // synchronously), so wait for networkidle instead: that fires once Vue Router // has processed the popstate event, mounted the new view, and any route- // triggered data fetches have settled. await page.waitForLoadState('networkidle', { timeout: 10_000 }); }