test: move browser._launchServer in child process (#37114)
Co-authored-by: Max Schmitt <max@schmitt.mx>
This commit is contained in:
		
							parent
							
								
									a5daba92ac
								
							
						
					
					
						commit
						face8d44ea
					
				|  | @ -2,7 +2,8 @@ const fs = require('fs'); | |||
| const cluster = require('cluster'); | ||||
| 
 | ||||
| async function start() { | ||||
|   const { browserTypeName, launchOptions, stallOnClose, disconnectOnSIGHUP, exitOnFile, exitOnWarning, startStopAndRunHttp } = JSON.parse(process.argv[2]); | ||||
|   /** @type {import("./remoteServer").RemoteServerOptions} */ | ||||
|   const { browserTypeName, launchOptions, stallOnClose, disconnectOnSIGHUP, exitOnFile, exitOnWarning, startStopAndRunHttp, existingBrowser } = JSON.parse(process.argv[2]); | ||||
|   if (stallOnClose) { | ||||
|     launchOptions.__testHookGracefullyClose = () => { | ||||
|       console.log(`(stalled=>true)`); | ||||
|  | @ -25,7 +26,15 @@ async function start() { | |||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   const browserServer = await playwright[browserTypeName].launchServer(launchOptions); | ||||
|   let browserServer; | ||||
|   if (existingBrowser) { | ||||
|     const browser = await playwright[browserTypeName].launch(launchOptions); | ||||
|     const page = await browser.newPage(); | ||||
|     await page.setContent(existingBrowser.content); | ||||
|     browserServer = await browser._launchServer(); | ||||
|   } else { | ||||
|     browserServer = await playwright[browserTypeName].launchServer(launchOptions); | ||||
|   } | ||||
|   if (disconnectOnSIGHUP) | ||||
|     process.on('SIGHUP', () => browserServer._disconnectForTest()); | ||||
| 
 | ||||
|  |  | |||
|  | @ -69,6 +69,7 @@ export type RemoteServerOptions = { | |||
|   url?: string; | ||||
|   startStopAndRunHttp?: boolean; | ||||
|   sharedBrowser?: boolean; | ||||
|   existingBrowser?: { content: string }; | ||||
| }; | ||||
| 
 | ||||
| export class RemoteServer implements PlaywrightServer { | ||||
|  |  | |||
|  | @ -1047,18 +1047,12 @@ test.describe('launchServer only', () => { | |||
|     await expect(browser._parent.launch({ timeout: 0 })).rejects.toThrowError('Launching more browsers is not allowed.'); | ||||
|   }); | ||||
| 
 | ||||
|   test('should work with existing browser', async ({ connect, browserType, mode }) => { | ||||
|   test('should work with existing browser', async ({ connect, startRemoteServer, mode }) => { | ||||
|     test.skip(mode === 'driver', 'Driver mode does not support browserType.launchServer'); | ||||
|     // can't use browser fixture because it's shared across the worker, launching a server on that would infect other tests
 | ||||
|     const browser = await browserType.launch(); | ||||
|     const page = await browser.newPage(); | ||||
|     await page.setContent('hello world'); | ||||
|     const server = await (browser as any)._launchServer(); | ||||
|     const secondBrowser = await connect(server.wsEndpoint()); | ||||
|     const secondPage = secondBrowser.contexts()[0].pages()[0]; | ||||
|     expect(await secondPage.content()).toContain('hello world'); | ||||
|     await server.close(); | ||||
|     await browser.close(); | ||||
|     const remoteServer = await startRemoteServer('launchServer', { existingBrowser: { content: 'hello world' } }); | ||||
|     const browser = await connect(remoteServer.wsEndpoint()); | ||||
|     const page = browser.contexts()[0].pages()[0]; | ||||
|     expect(await page.content()).toContain('hello world'); | ||||
|   }); | ||||
| }); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue