@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
71 lines (68 loc) • 3.77 kB
JavaScript
/**
*
* Switch focus to a particular tab / window.
*
* <example>
:switchWindow.js
it('should switch to another window', async () => {
// open url
await browser.url('https://google.com')
// create new window
await browser.newWindow('https://webdriver.io')
// switch back via url match
await browser.switchWindow('google.com')
// switch back via title match
await browser.switchWindow('Next-gen browser and mobile automation test framework for Node.js')
});
* </example>
*
* @param {String|RegExp} matcher String or regular expression that matches the title and url of the page or window name
*
* @uses protocol/getWindowHandles, protocol/switchToWindow, protocol/getUrl, protocol/getTitle
* @alias browser.switchTab
* @type window
*
*/
export async function switchWindow(matcher) {
/**
* parameter check
*/
if (typeof matcher !== 'string' && !(matcher instanceof RegExp)) {
throw new Error('Unsupported parameter for switchWindow, required is "string" or an RegExp');
}
const tabs = await this.getWindowHandles();
const matchesTarget = (target) => {
if (typeof matcher === 'string') {
return target.includes(matcher);
}
return !!target.match(matcher);
};
for (const tab of tabs) {
await this.switchToWindow(tab);
/**
* check if url matches
*/
const url = await this.getUrl();
if (matchesTarget(url)) {
return tab;
}
/**
* check title
*/
const title = await this.getTitle();
if (matchesTarget(title)) {
return tab;
}
/**
* check window name
*/
const windowName = await this.execute(
/* istanbul ignore next */
() => window.name);
if (windowName && matchesTarget(windowName)) {
return tab;
}
}
throw new Error(`No window found with title, url or name matching "${matcher}"`);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoV2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Jyb3dzZXIvc3dpdGNoV2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FFOUIsT0FBd0I7SUFFeEI7O09BRUc7SUFDSCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxZQUFZLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFBO0lBQ2hHLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBRTFDLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBYyxFQUFXLEVBQUU7UUFDOUMsSUFBSSxPQUFPLE9BQU8sS0FBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbkMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFBO0lBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFOUI7O1dBRUc7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUMvQixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxDQUFBO1FBQ2QsQ0FBQztRQUVEOztXQUVHO1FBQ0gsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDbkMsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLEdBQUcsQ0FBQTtRQUNkLENBQUM7UUFFRDs7V0FFRztRQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU87UUFDakMsMEJBQTBCO1FBQzFCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN0QixJQUFJLFVBQVUsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxPQUFPLEdBQUcsQ0FBQTtRQUNkLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsT0FBTyxHQUFHLENBQUMsQ0FBQTtBQUNwRixDQUFDIn0=