hello-theme/tests/playwright/pages/base-page.ts
2025-08-14 11:01:55 +03:00

49 lines
1.2 KiB
TypeScript

import { type Page, type TestInfo } from '@playwright/test';
export default class BasePage {
readonly page: Page;
readonly testInfo: TestInfo;
/**
* @param {import('@playwright/test').Page} page
* @param {import('@playwright/test').TestInfo} testInfo
*/
constructor( page: Page, testInfo: TestInfo ) {
if ( ! page || ! testInfo ) {
throw new Error( 'Page and TestInfo must be provided' );
}
/**
* @type {import('@playwright/test').Page}
*/
this.page = page;
/**
* @type {import('@playwright/test').TestInfo}
*/
this.testInfo = testInfo;
const { baseURL, proxy } = this.testInfo.config.projects[ 0 ].use;
// If wordpress is not located on the domain's top-level (e.g: http://local.host/test-wordpress ), playwright's `baseURL` cannot handle it.
if ( proxy ) {
this.page = new Proxy( this.page, {
get: ( target, key ) => {
switch ( key ) {
case 'goto':
return ( path: string ) => page.goto( baseURL + path );
case 'waitForNavigation': {
return ( args: { url?: string } ) => {
args = ( args.url ) ? { url: baseURL + args.url } : args;
return page.waitForNavigation( args );
};
}
}
return target[ key ];
},
} );
}
}
}