Files
jdescopingtool/TestScripts/deprecated/playwright/helpers/navigation.helper.ts
T

109 lines
3.5 KiB
TypeScript

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<void> {
// 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<void> {
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<void> {
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<void> {
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<void> {
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<void> {
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<void> {
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<void> {
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<void> {
await page.locator(`a:has-text("${linkText}")`).click();
await page.waitForLoadState('networkidle', { timeout: 30000 });
await waitForBlazorReady(page);
}