mirror of
https://gh.wpcy.net/https://github.com/elementor/hello-theme.git
synced 2026-04-24 11:45:02 +08:00
49 lines
1.2 KiB
TypeScript
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 ];
|
|
},
|
|
} );
|
|
}
|
|
}
|
|
}
|