UNPKG

@luminati-io/webdriverio8

Version:

Next-gen browser and mobile automation test framework for Node.js

71 lines (68 loc) 3.77 kB
/** * * 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=