Skip to content

Commit aef9f29

Browse files
committed
Create new page (and new CDP connection) for every test
1 parent a9dcc53 commit aef9f29

File tree

2 files changed

+47
-16
lines changed

2 files changed

+47
-16
lines changed

tests/extension/extensionTest.ts

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616

1717
import { baseTest } from '../config/baseTest';
18-
import { chromium } from 'playwright';
18+
import { chromium, type BrowserContext } from 'playwright';
1919
import { expect, type PageTestFixtures, type PageWorkerFixtures } from '../page/pageTestApi';
2020
import type { TraceViewerFixtures } from '../config/traceViewerFixtures';
2121
import { traceViewerFixtures } from '../config/traceViewerFixtures';
@@ -24,7 +24,13 @@ import http from 'node:http';
2424
import path from 'node:path';
2525
import { AddressInfo } from 'node:net';
2626

27-
export const extensionTest = baseTest.extend<TraceViewerFixtures>(traceViewerFixtures).extend<PageTestFixtures, PageWorkerFixtures>({
27+
export type ExtensionTestFixtures = {
28+
persistentContext: BrowserContext;
29+
relayServer: http.Server;
30+
};
31+
32+
33+
export const extensionTest = baseTest.extend<TraceViewerFixtures>(traceViewerFixtures).extend<PageTestFixtures, PageWorkerFixtures & ExtensionTestFixtures>({
2834
browserVersion: [({ browser }, use) => use(browser.version()), { scope: 'worker' }],
2935
browserMajorVersion: [({ browserVersion }, use) => use(Number(browserVersion.split('.')[0])), { scope: 'worker' }],
3036
isAndroid: [false, { scope: 'worker' }],
@@ -33,9 +39,16 @@ export const extensionTest = baseTest.extend<TraceViewerFixtures>(traceViewerFix
3339
isWebView2: [false, { scope: 'worker' }],
3440
isHeadlessShell: [false, { scope: 'worker' }],
3541

36-
browser: [async ({ playwright }, use, testInfo) => {
42+
relayServer: [async ({ }, use) => {
3743
const httpServer = http.createServer();
3844
await new Promise<void>(resolve => httpServer.listen(0, resolve));
45+
const { CDPRelayServer } = await import('../../../playwright-mcp/src/cdpRelay.ts');
46+
new CDPRelayServer(httpServer);
47+
await use(httpServer);
48+
httpServer.close();
49+
}, { scope: 'worker' }],
50+
51+
persistentContext: [async ({ }, use) => {
3952
const pathToExtension = path.join(__dirname, '../../../playwright-mcp/extension');
4053
const context = await chromium.launchPersistentContext('', {
4154
executablePath: process.env.CRPATH,
@@ -46,28 +59,45 @@ export const extensionTest = baseTest.extend<TraceViewerFixtures>(traceViewerFix
4659
],
4760
channel: 'chromium',
4861
});
49-
const { CDPRelayServer } = await import('../../../playwright-mcp/src/cdpRelay.ts');
50-
new CDPRelayServer(httpServer);
51-
const origin = `ws://localhost:${(httpServer.address() as AddressInfo).port}`;
52-
await expect.poll(() => context?.serviceWorkers()).toHaveLength(1);
53-
await context.pages()[0].goto(new URL('/popup.html', context.serviceWorkers()[0].url()).toString());
54-
await context.pages()[0].getByRole('textbox', { name: 'Bridge Server URL:' }).clear();
55-
await context.pages()[0].getByRole('textbox', { name: 'Bridge Server URL:' }).fill(`${origin}/extension`);
56-
await context.pages()[0].getByRole('button', { name: 'Share This Tab' }).click();
57-
await context.pages()[0].goto('about:blank');
58-
const browser = await playwright.chromium.connectOverCDP(`${origin}/cdp`);
5962
context.on('dialog', dialog => {
6063
// Make sure the dialog is not dismissed automatically.
6164
});
65+
await use(context);
66+
await context.close();
67+
}, { scope: 'worker' }],
68+
69+
browser: [async ({ persistentContext, relayServer, playwright }, use, testInfo) => {
70+
const origin = `ws://localhost:${(relayServer.address() as AddressInfo).port}`;
71+
await expect.poll(() => persistentContext.serviceWorkers()).toHaveLength(1);
72+
await persistentContext.pages()[0].goto(new URL('/popup.html', persistentContext.serviceWorkers()[0].url()).toString());
73+
await persistentContext.pages()[0].getByRole('textbox', { name: 'Bridge Server URL:' }).clear();
74+
await persistentContext.pages()[0].getByRole('textbox', { name: 'Bridge Server URL:' }).fill(`${origin}/extension`);
75+
await persistentContext.pages()[0].getByRole('button', { name: 'Share This Tab' }).click();
76+
await persistentContext.pages()[0].goto('about:blank');
77+
const browser = await playwright.chromium.connectOverCDP(`${origin}/cdp`);
6278
await use(browser);
63-
httpServer.close();
6479
}, { scope: 'worker' }],
6580

6681
context: async ({ browser }, use) => {
6782
await use(browser.contexts()[0]);
6883
},
6984

70-
page: async ({ browser }, use) => {
71-
await use(browser.contexts()[0].pages()[0]);
85+
page: async ({ persistentContext, relayServer, playwright }, use) => {
86+
const page = await persistentContext.newPage();
87+
const origin = `ws://localhost:${(relayServer.address() as AddressInfo).port}`;
88+
await expect.poll(() => persistentContext.serviceWorkers()).toHaveLength(1);
89+
await page.goto(new URL('/popup.html', persistentContext.serviceWorkers()[0].url()).toString());
90+
await page.getByRole('textbox', { name: 'Bridge Server URL:' }).clear();
91+
await page.getByRole('textbox', { name: 'Bridge Server URL:' }).fill(`${origin}/extension`);
92+
await page.getByRole('button', { name: 'Share This Tab' }).click();
93+
await page.goto('about:blank');
94+
const browser = await playwright.chromium.connectOverCDP(`${origin}/cdp`);
95+
const pages = browser.contexts()[0].pages();
96+
const remotePage = pages[pages.length - 1];
97+
await use(remotePage);
98+
// Disconnect from the tab.
99+
await browser.close();
100+
// Close the page.
101+
await page.close();
72102
}
73103
});

tests/extension/playwright.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const config: Config<PlaywrightWorkerOptions & PlaywrightTestOptions> = {
3131
timeout: 30000,
3232
globalTimeout: 5400000,
3333
workers: process.env.CI ? 1 : undefined,
34+
fullyParallel: !process.env.CI,
3435
forbidOnly: !!process.env.CI,
3536
retries: process.env.CI ? 3 : 0,
3637
reporter: process.env.CI ? [

0 commit comments

Comments
 (0)