import { Page } from '@playwright/test'; import { login } from './auth.helper'; /** * Wait for Blazor WASM application to be fully loaded * @param page - Playwright page object * @param timeout - Maximum time to wait in milliseconds (default: 120000) */ export async function waitForBlazorReady(page: Page, timeout: number = 120000): Promise { // Wait for network to be idle (all WASM files loaded) await page.waitForLoadState('networkidle', { timeout: 60000 }); // Wait for Radzen components or main content to be visible await page.locator('.rz-dropdown').or(page.locator('text=Search Details')).or(page.locator('.rz-data-grid')).first().waitFor({ state: 'visible', timeout: timeout }); // Additional wait for Radzen components to fully initialize await page.waitForTimeout(2000); } /** * Navigate to the search page and wait for it to be ready * @param page - Playwright page object */ export async function navigateToSearchPage(page: Page): Promise { await page.goto('/search'); await page.waitForLoadState('networkidle', { timeout: 60000 }); await login(page); await waitForBlazorReady(page); } /** * Navigate to a specific search by ID * @param page - Playwright page object * @param searchId - The ID of the search to view */ export async function navigateToSearch(page: Page, searchId: number): Promise { await page.goto(`/search/${searchId}`); await page.waitForLoadState('networkidle', { timeout: 60000 }); await login(page); await waitForBlazorReady(page); } /** * Navigate to the searches dashboard (home page) * @param page - Playwright page object */ export async function navigateToSearchesDashboard(page: Page): Promise { await page.goto('/searches'); await page.waitForLoadState('networkidle', { timeout: 60000 }); await login(page); await waitForBlazorReady(page); } /** * Navigate to the search queue page * @param page - Playwright page object */ export async function navigateToSearchQueue(page: Page): Promise { await page.goto('/search/queue'); await page.waitForLoadState('networkidle', { timeout: 60000 }); await login(page); await waitForBlazorReady(page); } /** * Navigate to the refresh status page * @param page - Playwright page object */ export async function navigateToRefreshStatus(page: Page): Promise { await page.goto('/refresh-status'); await page.waitForLoadState('networkidle', { timeout: 60000 }); await login(page); await waitForBlazorReady(page); } /** * Navigate to the data sync requests page * @param page - Playwright page object */ export async function navigateToDataSync(page: Page): Promise { await page.goto('/data-sync/requests'); await page.waitForLoadState('networkidle', { timeout: 60000 }); await login(page); await waitForBlazorReady(page); } /** * Navigate to the login page * @param page - Playwright page object */ export async function navigateToLoginPage(page: Page): Promise { await page.goto('/login'); await page.waitForLoadState('networkidle', { timeout: 60000 }); } /** * Click a navigation link in the header * @param page - Playwright page object * @param linkText - The text of the navigation link to click */ export async function clickNavLink(page: Page, linkText: string): Promise { await page.locator(`a:has-text("${linkText}")`).click(); await page.waitForLoadState('networkidle', { timeout: 30000 }); await waitForBlazorReady(page); }