From c86df83c01439fd3fe89d0b2c9cb1638da026f5f Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Mon, 21 Sep 2026 08:56:42 +0200 Subject: [PATCH] try fixing leaky firefox tests (#12904) --- src/frontend/tests/baseFixtures.ts | 36 +++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/frontend/tests/baseFixtures.ts b/src/frontend/tests/baseFixtures.ts index 389c612572..3d0e7bd00b 100644 --- a/src/frontend/tests/baseFixtures.ts +++ b/src/frontend/tests/baseFixtures.ts @@ -76,7 +76,11 @@ async function collectCoverageFromContext(context: BrowserContext) { ); } -export const test = baseTest.extend<{}, {}>({ +type TestFixtures = { + closeTestPages: BrowserContext[]; +}; + +export const test = baseTest.extend({ // Wrap browser.newPage so contexts created via doCachedLogin also get coverage browser: [ async ({ browser }, use) => { @@ -99,6 +103,36 @@ export const test = baseTest.extend<{}, {}>({ }, { scope: 'worker' } ], + // remove possibly leaky browser contexts after each test + closeTestPages: [ + async ({ browser }, use) => { + const contexts: BrowserContext[] = []; + const newPage = browser.newPage.bind(browser); + + (browser as any).newPage = async ( + options?: Parameters[0] + ) => { + const page = await newPage(options); + + if (!contexts.includes(page.context())) { + contexts.push(page.context()); + } + + return page; + }; + + try { + await use(contexts); + } finally { + (browser as any).newPage = newPage; + for (const context of contexts) { + await collectCoverageFromContext(context); + await context.close().catch(() => {}); + } + } + }, + { auto: true } + ], context: async ({ context }, use) => { await setupCoverageCollection(context);