109 lines
3.5 KiB
TypeScript
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);
|
|
}
|