Skip to content

Commit

Permalink
Extend vitest webdriver provider.
Browse files Browse the repository at this point in the history
  • Loading branch information
edoardocavazza committed Nov 8, 2024
1 parent 7a9205d commit 1b45e36
Show file tree
Hide file tree
Showing 4 changed files with 445 additions and 60 deletions.
5 changes: 5 additions & 0 deletions .changeset/flat-jokes-boil.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@chialab/vitest-provider-browserstack': minor
---

Extend vitest webdriver provider.
66 changes: 11 additions & 55 deletions packages/vitest-provider-browserstack/lib/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import process from 'node:process';
import { webdriverio } from '@vitest/browser/providers';
import { Local } from 'browserstack-local';
import ip from 'ip';
import { remote } from 'webdriverio';
Expand All @@ -19,18 +20,12 @@ import { remote } from 'webdriverio';
* A BrowserStack provider for vitest.
* @implements {BrowserProvider}
*/
export default class BrowserStackProvider {
export default class BrowserStackProvider extends webdriverio {
/**
* @type {string}
*/
name = 'browserstack';

/**
* @type {WorkspaceProject}
* @protected
*/
ctx;

/**
* @type {string}
* @protected
Expand Down Expand Up @@ -76,11 +71,10 @@ export default class BrowserStackProvider {
* Get supported browsers.
* @returns {string[]}
*/
getSupportedBrowsers() {
return Object.assign([], {
getSupportedBrowsers = () =>
Object.assign([], {
includes: /** @param {string} value */ (value) => value.startsWith('browserstack:'),
});
}

/**
* Initialize the BrowserStack provider.
Expand All @@ -89,7 +83,7 @@ export default class BrowserStackProvider {
* @throws {Error} If browser configuration is missing.
*/
initialize(ctx, options) {
this.ctx = ctx;
super.initialize(ctx, options);

const { config, browser } = ctx;
if (!browser) {
Expand Down Expand Up @@ -147,32 +141,6 @@ export default class BrowserStackProvider {
}));
}

/**
* @inheritdoc
*/
async beforeCommand() {
const browser = /** @type {WebdriverIO.Browser} */ (await this._browserPromise);
const iframe = await browser.findElement('css selector', 'iframe[data-vitest]');
await browser.switchToFrame(iframe);
}

/**
* @inheritdoc
*/
async afterCommand() {
const browser = /** @type {WebdriverIO.Browser} */ (await this._browserPromise);
await browser.switchToParentFrame();
}

/**
* @inheritdoc
*/
getCommandsContext() {
return {
browser: this.browser,
};
}

/**
* Open the browser.
* @returns {Promise<WebdriverIO.Browser>}
Expand Down Expand Up @@ -209,10 +177,11 @@ export default class BrowserStackProvider {

/**
* Open the page in the browser.
* @param {string} contextId - The browser context.
* @param {string} url - The URL to open.
* @returns {Promise<void>}
*/
async openPage(url) {
openPage = async (contextId, url) => {
const browser = await this.openBrowser();
const networkAddress = ip.address();
if (networkAddress) {
Expand All @@ -225,13 +194,13 @@ export default class BrowserStackProvider {
if (title !== 'Vitest Browser Runner') {
throw new Error('Failed to open url');
}
}
};

/**
* Close the browser and tunnel.
* @returns {Promise<void>}
*/
async close() {
close = async () => {
try {
if (this._tunnelPromise) {
const closeTunnel = await this._tunnelPromise;
Expand All @@ -241,19 +210,6 @@ export default class BrowserStackProvider {
//
}

try {
if (this._browserPromise) {
const browser = await this._browserPromise;
await browser.deleteSession();
}
} catch {
//
}

/**
* TODO
* @see https://github.com/vitest-dev/vitest/blob/eac7776521bcf4e335771b1ab4f823f40ad9c4ff/packages/vitest/src/node/browser/webdriver.ts#L83
*/
process.exit();
}
return super.close();
};
}
1 change: 1 addition & 0 deletions packages/vitest-provider-browserstack/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"node": ">=18"
},
"dependencies": {
"@vitest/browser": "^2.1.4",
"browserstack-local": "^1.5.5",
"ip": "^2.0.0",
"webdriverio": "^8.17.0"
Expand Down
Loading

0 comments on commit 1b45e36

Please sign in to comment.