mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const fs = require('fs');
 | |
| const cluster = require('cluster');
 | |
| 
 | |
| async function start() {
 | |
|   const { browserTypeName, launchOptions, stallOnClose, disconnectOnSIGHUP, exitOnFile, exitOnWarning } = JSON.parse(process.argv[2]);
 | |
|   if (stallOnClose) {
 | |
|     launchOptions.__testHookGracefullyClose = () => {
 | |
|       console.log(`(stalled=>true)`);
 | |
|       return new Promise(() => { });
 | |
|     };
 | |
|   }
 | |
|   if (exitOnWarning)
 | |
|     process.on('warning', () => process.exit(43));
 | |
| 
 | |
|   const playwright = require('playwright-core');
 | |
| 
 | |
|   if (disconnectOnSIGHUP)
 | |
|     launchOptions.handleSIGHUP = false;
 | |
|   const browserServer = await playwright[browserTypeName].launchServer(launchOptions);
 | |
|   if (disconnectOnSIGHUP)
 | |
|     process.on('SIGHUP', () => browserServer._disconnectForTest());
 | |
| 
 | |
|   if (exitOnFile) {
 | |
|     (async function waitForFileAndExit() {
 | |
|       while (true) {
 | |
|         if (fs.existsSync(exitOnFile))
 | |
|           break;
 | |
|         await new Promise(f => setTimeout(f, 100));
 | |
|       }
 | |
|       process.exit(42);
 | |
|     })();
 | |
|   }
 | |
| 
 | |
|   browserServer.on('close', (exitCode, signal) => {
 | |
|     console.log(`(exitCode=>${exitCode})`);
 | |
|     console.log(`(signal=>${signal})`);
 | |
|   });
 | |
|   console.log(`(tempDir=>${browserServer._userDataDirForTest})`);
 | |
|   console.log(`(pid=>${browserServer.process().pid})`);
 | |
|   console.log(`(wsEndpoint=>${browserServer.wsEndpoint()})`);
 | |
| }
 | |
| 
 | |
| process.on('uncaughtException', error => console.log(error));
 | |
| process.on('unhandledRejection', reason => console.log(reason));
 | |
| 
 | |
| if (cluster.isWorker || !JSON.parse(process.argv[2]).inCluster) {
 | |
|   start();
 | |
| } else {
 | |
|   cluster.fork();
 | |
|   cluster.on('exit', (worker, code, signal) => {
 | |
|     process.exit(0);
 | |
|   });
 | |
| }
 | 
