Files
automaker/apps/ui/tests/utils/core/waiting.ts
Test User 036a7d9d26 refactor: update e2e tests to use 'load' state for page navigation
- Changed instances of `waitForLoadState('networkidle')` to `waitForLoadState('load')` across multiple test files and utility functions to improve test reliability in applications with persistent connections.
- Added documentation to the e2e testing guide explaining the rationale behind using 'load' state instead of 'networkidle' to prevent timeouts and flaky tests.
2025-12-22 17:16:55 -05:00

43 lines
1.2 KiB
TypeScript

import { Page, Locator } from '@playwright/test';
/**
* Wait for the page to load
* Uses 'load' state instead of 'networkidle' because the app has persistent
* connections (websockets/polling) that prevent network from ever being idle.
* Tests should wait for specific elements to verify page is ready.
*/
export async function waitForNetworkIdle(page: Page): Promise<void> {
await page.waitForLoadState('load');
}
/**
* Wait for an element with a specific data-testid to appear
*/
export async function waitForElement(
page: Page,
testId: string,
options?: { timeout?: number; state?: 'attached' | 'visible' | 'hidden' }
): Promise<Locator> {
const element = page.locator(`[data-testid="${testId}"]`);
await element.waitFor({
timeout: options?.timeout ?? 5000,
state: options?.state ?? 'visible',
});
return element;
}
/**
* Wait for an element with a specific data-testid to be hidden
*/
export async function waitForElementHidden(
page: Page,
testId: string,
options?: { timeout?: number }
): Promise<void> {
const element = page.locator(`[data-testid="${testId}"]`);
await element.waitFor({
timeout: options?.timeout ?? 5000,
state: 'hidden',
});
}