diff --git a/packages/playwright-core/src/browserServerImpl.ts b/packages/playwright-core/src/browserServerImpl.ts index c594feb35e..4e0af7b209 100644 --- a/packages/playwright-core/src/browserServerImpl.ts +++ b/packages/playwright-core/src/browserServerImpl.ts @@ -34,6 +34,8 @@ import { BrowserContext } from './server/browserContext'; import { CRBrowser } from './server/chromium/crBrowser'; import { CDPSessionDispatcher } from './dispatchers/cdpSessionDispatcher'; import { PageDispatcher } from './dispatchers/pageDispatcher'; +import { helper } from './server/helper'; +import { rewriteErrorMessage } from './utils/stackTrace'; export class BrowserServerLauncherImpl implements BrowserServerLauncher { private _browserName: 'chromium' | 'firefox' | 'webkit'; @@ -45,12 +47,17 @@ export class BrowserServerLauncherImpl implements BrowserServerLauncher { async launchServer(options: LaunchServerOptions = {}): Promise { const playwright = createPlaywright('javascript'); // 1. Pre-launch the browser - const browser = await playwright[this._browserName].launch(internalCallMetadata(), { + const metadata = internalCallMetadata(); + const browser = await playwright[this._browserName].launch(metadata, { ...options, ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined, ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs), env: options.env ? envObjectToArray(options.env) : undefined, - }, toProtocolLogger(options.logger)); + }, toProtocolLogger(options.logger)).catch(e => { + const log = helper.formatBrowserLogs(metadata.log); + rewriteErrorMessage(e, `${e.message} Failed to launch browser.${log}`); + throw e; + }); let path = `/${createGuid()}`; if (options.wsPath)