Skip to content

Commit 8b5a2a5

Browse files
committed
feat: enable support for firefox webdriver-bidi
1 parent ddb3fb9 commit 8b5a2a5

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

jest-puppeteer.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ process.env.TEST_SERVER_PORT = port;
99
*/
1010
const jestPuppeteerConfig = {
1111
launch: {
12+
browser: process.env.BROWSER || "chrome",
1213
headless: "new",
1314
args: ["--no-sandbox"],
1415
},

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"lint": "prettier --check . && eslint .",
1212
"test": "jest --runInBand",
1313
"test:incognito": "cross-env INCOGNITO=true jest --runInBand",
14+
"test:firefox": "cross-env BROWSER=firefox jest --runInBand",
1415
"release": "npm run build && lerna publish --conventional-commits && npx conventional-github-releaser -p angular",
1516
"release-canary": "npm run build && lerna publish --canary --dist-tag canary"
1617
},

packages/jest-environment-puppeteer/src/browsers.ts

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,41 @@ export const startBrowsers = async ({
100100
);
101101
const wsEndpoints = browsers.map((browser) => browser.wsEndpoint());
102102
saveWsEndpoints(wsEndpoints);
103+
browsers.forEach((browser) => browser.disconnect());
103104
return browsers;
104105
};
105106

106107
export const closeBrowsers = async (
107108
config: JestPuppeteerConfig,
108109
browsers: Browser[],
109110
) => {
110-
await Promise.all(
111-
browsers.map(async (browser) => closeBrowser(config, browser)),
112-
);
111+
if (config.connect) {
112+
await Promise.all(
113+
browsers.map(async (browser) => closeBrowser(config, browser)),
114+
);
115+
}
116+
117+
const closeRequests: Promise<void>[] = [];
118+
const puppeteer = getPuppeteer();
119+
const wsEndpoints = readWsEndpoints();
120+
while (wsEndpoints.length) {
121+
const wsEndpoint = wsEndpoints.pop()!;
122+
closeRequests.push(
123+
puppeteer
124+
.connect({
125+
...(config.launch?.browser === "firefox" && {
126+
protocol: "webDriverBiDi",
127+
}),
128+
...config.connect,
129+
...config.launch,
130+
browserURL: undefined,
131+
browserWSEndpoint: wsEndpoint,
132+
})
133+
.then((browser) => browser.close()),
134+
);
135+
}
136+
await Promise.all(closeRequests);
137+
saveWsEndpoints([]);
113138
};
114139

115140
const getWorkerWsEndpoint = (): string => {
@@ -128,6 +153,7 @@ export const connectBrowserFromWorker = async (
128153
const wsEndpoint = getWorkerWsEndpoint();
129154
const puppeteer = getPuppeteer();
130155
return puppeteer.connect({
156+
...(config.launch?.browser === "firefox" && { protocol: "webDriverBiDi" }),
131157
...config.connect,
132158
...config.launch,
133159
browserURL: undefined,

0 commit comments

Comments
 (0)