export class BasePage { constructor(page) { this.page = page; } async waitForApiResponse(url, status = 200) { return await this.page.waitForResponse(response => response.url().includes(url) && response.status() === status ); } async waitForLoadingToFinish() { // Wait for any loading spinners to disappear await this.page.waitForFunction(() => { const loadingElements = document.querySelectorAll('[data-testid="loading"], .p-progress-spinner'); return loadingElements.length === 0; }, { timeout: 10000 }); } async checkErrorMessage(expectedMessage) { const errorElement = this.page.locator('.p-message-error, [data-testid="error"]'); await errorElement.waitFor({ state: 'visible', timeout: 5000 }); const actualMessage = await errorElement.textContent(); return actualMessage.includes(expectedMessage); } async checkSuccessMessage(expectedMessage) { const successElement = this.page.locator('.p-message-success, [data-testid="success"]'); await successElement.waitFor({ state: 'visible', timeout: 5000 }); const actualMessage = await successElement.textContent(); return actualMessage.includes(expectedMessage); } async waitForNavigation() { await this.page.waitForLoadState('networkidle'); } }