From 798696a18a56956d0b81e1cbf511c1b93e113f66 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Tue, 14 Feb 2023 12:56:47 -0800 Subject: [PATCH] chore: fix context reuse disposal (#20876) Fixes: https://github.com/microsoft/playwright/issues/20409 --- .../playwright-core/src/server/browser.ts | 4 ---- .../playwright-test/playwright.reuse.spec.ts | 20 +++++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/playwright-core/src/server/browser.ts b/packages/playwright-core/src/server/browser.ts index 39fc0e4640..63d8f12719 100644 --- a/packages/playwright-core/src/server/browser.ts +++ b/packages/playwright-core/src/server/browser.ts @@ -97,10 +97,6 @@ export abstract class Browser extends SdkObject { async newContextForReuse(params: channels.BrowserNewContextForReuseParams, metadata: CallMetadata): Promise<{ context: BrowserContext, needsReset: boolean }> { const hash = BrowserContext.reusableContextHash(params); - for (const context of this.contexts()) { - if (context !== this._contextForReuse?.context) - await context.close(metadata); - } if (!this._contextForReuse || hash !== this._contextForReuse.hash || !this._contextForReuse.context.canResetForReuse()) { if (this._contextForReuse) await this._contextForReuse.context.close(metadata); diff --git a/tests/playwright-test/playwright.reuse.spec.ts b/tests/playwright-test/playwright.reuse.spec.ts index ee30383c1d..e5e1160783 100644 --- a/tests/playwright-test/playwright.reuse.spec.ts +++ b/tests/playwright-test/playwright.reuse.spec.ts @@ -495,3 +495,23 @@ test('should reset tracing', async ({ runInlineTest }, testInfo) => { ]); expect(trace2.events.some(e => e.type === 'frame-snapshot')).toBe(true); }); + +test('should not delete others contexts', async ({ runInlineTest }) => { + const result = await runInlineTest({ + 'src/reuse.test.ts': ` + const test = pwt.test.extend<{ loggedInPage: Page }>({ + loggedInPage: async ({ browser }, use) => { + const page = await browser.newPage(); + await use(page); + await page.close(); + }, + }); + test("passes", async ({ loggedInPage, page }) => { + await loggedInPage.goto('data:text/plain,Hello world'); + }); + `, + }, { workers: 1 }, { PW_TEST_REUSE_CONTEXT: '1' }); + + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); +});