20 lines
862 B
TypeScript
20 lines
862 B
TypeScript
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<void> {
|
|
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 });
|
|
}
|