Skip to content

Commit aa05507

Browse files
Skn0ttmxschmitt
andcommitted
cherry-pick(#37114): test: move browser._launchServer in child process
Co-authored-by: Max Schmitt <[email protected]>
1 parent 27ae7dc commit aa05507

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

tests/config/remote-server-impl.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ const fs = require('fs');
22
const cluster = require('cluster');
33

44
async function start() {
5-
const { browserTypeName, launchOptions, stallOnClose, disconnectOnSIGHUP, exitOnFile, exitOnWarning, startStopAndRunHttp } = JSON.parse(process.argv[2]);
5+
/** @type {import("./remoteServer").RemoteServerOptions} */
6+
const { browserTypeName, launchOptions, stallOnClose, disconnectOnSIGHUP, exitOnFile, exitOnWarning, startStopAndRunHttp, existingBrowser } = JSON.parse(process.argv[2]);
67
if (stallOnClose) {
78
launchOptions.__testHookGracefullyClose = () => {
89
console.log(`(stalled=>true)`);
@@ -25,7 +26,15 @@ async function start() {
2526
return;
2627
}
2728

28-
const browserServer = await playwright[browserTypeName].launchServer(launchOptions);
29+
let browserServer;
30+
if (existingBrowser) {
31+
const browser = await playwright[browserTypeName].launch(launchOptions);
32+
const page = await browser.newPage();
33+
await page.setContent(existingBrowser.content);
34+
browserServer = await browser._launchServer();
35+
} else {
36+
browserServer = await playwright[browserTypeName].launchServer(launchOptions);
37+
}
2938
if (disconnectOnSIGHUP)
3039
process.on('SIGHUP', () => browserServer._disconnectForTest());
3140

tests/config/remoteServer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export type RemoteServerOptions = {
6969
url?: string;
7070
startStopAndRunHttp?: boolean;
7171
sharedBrowser?: boolean;
72+
existingBrowser?: { content: string };
7273
};
7374

7475
export class RemoteServer implements PlaywrightServer {

tests/library/browsertype-connect.spec.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,18 +1047,12 @@ test.describe('launchServer only', () => {
10471047
await expect(browser._parent.launch({ timeout: 0 })).rejects.toThrowError('Launching more browsers is not allowed.');
10481048
});
10491049

1050-
test('should work with existing browser', async ({ connect, browserType, mode }) => {
1050+
test('should work with existing browser', async ({ connect, startRemoteServer, mode }) => {
10511051
test.skip(mode === 'driver', 'Driver mode does not support browserType.launchServer');
1052-
// can't use browser fixture because it's shared across the worker, launching a server on that would infect other tests
1053-
const browser = await browserType.launch();
1054-
const page = await browser.newPage();
1055-
await page.setContent('hello world');
1056-
const server = await (browser as any)._launchServer();
1057-
const secondBrowser = await connect(server.wsEndpoint());
1058-
const secondPage = secondBrowser.contexts()[0].pages()[0];
1059-
expect(await secondPage.content()).toContain('hello world');
1060-
await server.close();
1061-
await browser.close();
1052+
const remoteServer = await startRemoteServer('launchServer', { existingBrowser: { content: 'hello world' } });
1053+
const browser = await connect(remoteServer.wsEndpoint());
1054+
const page = browser.contexts()[0].pages()[0];
1055+
expect(await page.content()).toContain('hello world');
10621056
});
10631057
});
10641058

0 commit comments

Comments
 (0)