import os from 'node:os' import { test, expect } from 'vitest' /** * in order to run this file make sure you have `webdriverio` * installed using NPM before running it: * * $ npm install webdriverio * */ import { remote, attach } from 'webdriverio' test('allow to attach to an existing session', async () => { /** * fails in windows due to timeout: * > Command browsingContext.navigate with id 1 (with the following parameter: {"context":"BD746B5679530BC3403539C2FEC5A45A","url":"https://guinea-pig.webdriver.io","wait":"interactive"}) timed out */ if (os.platform() === 'win32') { return } const browser = await remote({ capabilities: { browserName: 'chrome', 'goog:chromeOptions': { args: ['headless', 'disable-gpu'] } } }) await browser.url('https://guinea-pig.webdriver.io') expect(await browser.getTitle()).toBe('WebdriverJS Testpage') const origContextTree = await browser.browsingContextGetTree({ maxDepth: 1 }) expect(origContextTree.contexts).toHaveLength(1) expect(typeof origContextTree.contexts[0].context).toBe('string') const otherBrowser = await attach(browser) expect(await otherBrowser.getTitle()).toBe('WebdriverJS Testpage') const newContextTree = await otherBrowser.browsingContextGetTree({ maxDepth: 1 }) expect(origContextTree.contexts[0].context).toBe(newContextTree.contexts[0].context) /** * can open other pages which requires e.g. network manager to be reinitialized correctly */ await otherBrowser.url('https://guinea-pig.webdriver.io/two.html') expect(await otherBrowser.getTitle()).toBe('two') await otherBrowser.deleteSession() /** * verify that browser session is deleted */ const error = await browser.status().catch((err) => err) expect(error.message).not.toBe('ChromeDriver ready for new sessions.') expect(error.message).toEqual(expect.stringContaining('Request failed with error code ECONNREFUSED')) })