@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
84 lines (82 loc) • 5.2 kB
JavaScript
import { sleep } from '@wdio/utils';
import newWindowHelper from '../../scripts/newWindow.js';
const WAIT_FOR_NEW_HANDLE_TIMEOUT = 3000;
/**
*
* Open new window in browser. This command is the equivalent function to `window.open()`. This command does not
* work in mobile environments.
*
* __Note:__ When calling this command you automatically switch to the new window.
*
* <example>
:newWindowSync.js
it('should open a new tab', async () => {
await browser.url('https://google.com')
console.log(await browser.getTitle()) // outputs: "Google"
await browser.newWindow('https://webdriver.io', {
windowName: 'WebdriverIO window',
windowFeature: 'width=420,height=230,resizable,scrollbars=yes,status=1',
})
console.log(await browser.getTitle()) // outputs: "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
const handles = await browser.getWindowHandles()
await browser.switchToWindow(handles[1])
await browser.closeWindow()
await browser.switchToWindow(handles[0])
console.log(await browser.getTitle()) // outputs: "Google"
});
* </example>
*
* @param {string} url website URL to open
* @param {NewWindowOptions=} options newWindow command options
* @param {String=} options.windowName name of the new window
* @param {String=} options.windowFeatures features of opened window (e.g. size, position, scrollbars, etc.)
*
* @return {String} id of window handle of new tab
*
* @uses browser/execute, protocol/getWindowHandles, protocol/switchToWindow
* @alias browser.newWindow
* @type window
*/
export async function newWindow(url, { windowName = '', windowFeatures = '' } = {}) {
/**
* parameter check
*/
if (typeof url !== 'string') {
throw new Error('number or type of arguments don\'t agree with newWindow command');
}
/**
* mobile check
*/
if (this.isMobile) {
throw new Error('newWindow command is not supported on mobile platforms');
}
const tabsBefore = await this.getWindowHandles();
if (this.isBidi) {
const { context } = await this.browsingContextCreate({ type: 'window' });
await this.browsingContextNavigate({ context, url });
}
else {
await this.execute(newWindowHelper, url, windowName, windowFeatures);
}
/**
* if tests are run in DevTools there might be a delay until
* a new window handle got registered, this little procedure
* waits for it to exist and avoid race conditions
*/
let tabsAfter = await this.getWindowHandles();
const now = Date.now();
while ((Date.now() - now) < WAIT_FOR_NEW_HANDLE_TIMEOUT) {
tabsAfter = await this.getWindowHandles();
if (tabsAfter.length > tabsBefore.length) {
break;
}
await sleep(100);
}
const newTab = tabsAfter.pop();
if (!newTab) {
throw new Error('No window handle was found to switch to');
}
await this.switchToWindow(newTab);
return newTab;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3V2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Jyb3dzZXIvbmV3V2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFbkMsT0FBTyxlQUFlLE1BQU0sNEJBQTRCLENBQUE7QUFHeEQsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLENBQUE7QUFFeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FFM0IsR0FBVyxFQUNYLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxjQUFjLEdBQUcsRUFBRSxLQUF1QixFQUFFO0lBRS9EOztPQUVHO0lBQ0gsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUE7SUFDdEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBRWhELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDeEUsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUN4RCxDQUFDO1NBQU0sQ0FBQztRQUNKLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUN4RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7SUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsMkJBQTJCLEVBQUUsQ0FBQztRQUN0RCxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUN6QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLE1BQUs7UUFDVCxDQUFDO1FBQ0QsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEIsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUU5QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUE7SUFDOUQsQ0FBQztJQUVELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNqQyxPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDIn0=