import {browser as wdio} from '@wdio/globals'; export type PageOptions = { browser?: typeof wdio; // MultiRemote usecase }; export type PageOpenOptions = { queryParameters?: Record; isNewTabRequest?: boolean; requestPath?: string; }; export default class Page { private readonly _baseUrl: string; private readonly _browser: typeof wdio; constructor(baseUrl: string, browser: typeof wdio) { this._baseUrl = baseUrl; this._browser = browser; } public async open(options: PageOpenOptions = {}): Promise { const {queryParameters, isNewTabRequest, requestPath} = options; let pageUrl = this._baseUrl; if (requestPath) { pageUrl += `/${requestPath}`; } if (queryParameters && Object.keys(queryParameters).length > 0) { const queryString = Object.entries(queryParameters) .map(([queryParameterName, queryParameterValue]) => `${queryParameterName}=${queryParameterValue}`) .join('&'); pageUrl += `?${queryString}`; } if (isNewTabRequest) { await (this._browser as any).newWindow(pageUrl); } else { await (this._browser as any).url(pageUrl); } } }