/** * QA360 Page Object Model (POM) - Base Page * * Base class for creating Page Objects. * * @see https://qa360.dev/docs/pom */ import type { IPageObject } from './types.js'; /** * Base Page Object class * * Extend this class to create your own Page Objects. * * @example * ```ts * import { BasePage } from 'qa360-core/pom'; * * export class LoginPage extends BasePage { * readonly name = 'login'; * readonly url = '/login'; * * readonly selectors = { * usernameInput: '#username', * passwordInput: '#password', * submitButton: '#login-btn', * }; * } * ``` */ export declare abstract class BasePage implements IPageObject { /** * Page name (unique identifier) */ abstract readonly name: string; /** * Page URL (relative or absolute) */ abstract readonly url: string; /** * Page selectors */ abstract readonly selectors: Record; /** * Page description */ readonly description?: string; /** * Base URL for resolving relative URLs */ protected baseUrl: string; constructor(baseUrl?: string); /** * Get full URL (resolves relative URLs against baseUrl) */ getUrl(): string; /** * Navigate to this page * (To be implemented by concrete class or framework adapter) */ abstract navigate(): Promise; /** * Wait for page to be ready * (To be implemented by concrete class or framework adapter) */ abstract waitForReady(): Promise; /** * Check if page is displayed * (To be implemented by concrete class or framework adapter) */ abstract isDisplayed(): Promise; /** * Get a selector by name */ getSelector(name: string): string; /** * Check if a selector exists */ hasSelector(name: string): boolean; /** * Get all selector names */ getSelectorNames(): string[]; /** * Update base URL */ setBaseUrl(baseUrl: string): void; /** * Get base URL */ getBaseUrl(): string; /** * Build URL with params */ buildUrl(params?: Record): string; /** * Parse URL params */ getUrlParams(url?: string): Record; /** * Get URL path segments */ getPathSegments(): string[]; /** * Check if URL matches pattern */ matchesUrl(pattern: string | RegExp): boolean; } /** * Playwright-specific Base Page * * Extends BasePage with Playwright-specific functionality. * * @example * ```ts * import { Page } from '@playwright/test'; * import { PlaywrightBasePage } from 'qa360-core/pom'; * * export class LoginPage extends PlaywrightBasePage { * constructor(page: Page, baseUrl = '') { * super(page, baseUrl); * this.name = 'login'; * this.url = '/login'; * this.selectors = { * username: '#username', * password: '#password', * submit: '#login-btn', * }; * } * } * ``` */ export declare abstract class PlaywrightBasePage extends BasePage { protected page: any; constructor(page: any, baseUrl?: string); /** * Navigate to this page using Playwright */ navigate(): Promise; /** * Wait for page to be ready using Playwright */ waitForReady(): Promise; /** * Check if page is displayed using Playwright */ isDisplayed(): Promise; /** * Get Playwright locator by selector name */ locator(selectorName: string): any; /** * Click element by selector name */ click(selectorName: string, options?: any): Promise; /** * Fill input by selector name */ fill(selectorName: string, value: string): Promise; /** * Get text content by selector name */ text(selectorName: string): Promise; /** * Wait for element by selector name */ waitFor(selectorName: string, options?: any): Promise; /** * Check if element is visible by selector name */ isVisible(selectorName: string): Promise; } /** * Puppeteer-specific Base Page * * Extends BasePage with Puppeteer-specific functionality. * * @example * ```ts * import { Page } from 'puppeteer'; * import { PuppeteerBasePage } from 'qa360-core/pom'; * * export class LoginPage extends PuppeteerBasePage { * constructor(page: Page, baseUrl = '') { * super(page, baseUrl); * this.name = 'login'; * this.url = '/login'; * this.selectors = { * username: '#username', * password: '#password', * submit: '#login-btn', * }; * } * } * ``` */ export declare abstract class PuppeteerBasePage extends BasePage { protected page: any; constructor(page: any, baseUrl?: string); /** * Navigate to this page using Puppeteer */ navigate(): Promise; /** * Wait for page to be ready using Puppeteer */ waitForReady(): Promise; /** * Check if page is displayed using Puppeteer */ isDisplayed(): Promise; /** * Get element handle by selector name */ $(selectorName: string): Promise; /** * Click element by selector name */ click(selectorName: string): Promise; /** * Fill input by selector name */ fill(selectorName: string, value: string): Promise; /** * Get text content by selector name */ text(selectorName: string): Promise; /** * Wait for element by selector name */ waitFor(selectorName: string, options?: { timeout?: number; }): Promise; /** * Check if element is visible by selector name */ isVisible(selectorName: string): Promise; }