diff --git a/src/server/chromium.ts b/src/server/chromium.ts index 833965f998..175b2b9a4f 100644 --- a/src/server/chromium.ts +++ b/src/server/chromium.ts @@ -50,6 +50,8 @@ export class Chromium implements BrowserType { } async launch(options?: LaunchOptions & { slowMo?: number }): Promise { + if (options && (options as any).userDataDir) + throw new Error('userDataDir option is not supported in `browserType.launch`. Use `browserType.launchPersistent` instead'); const { browserServer, transport } = await this._launchServer(options, 'local'); const browser = await CRBrowser.connect(transport!, options && options.slowMo); // Hack: for typical launch scenario, ensure that close waits for actual process termination. diff --git a/src/server/firefox.ts b/src/server/firefox.ts index d894d0f607..f33c2d2c76 100644 --- a/src/server/firefox.ts +++ b/src/server/firefox.ts @@ -60,6 +60,8 @@ export class Firefox implements BrowserType { } async launch(options?: LaunchOptions & { slowMo?: number }): Promise { + if (options && (options as any).userDataDir) + throw new Error('userDataDir option is not supported in `browserType.launch`. Use `browserType.launchPersistent` instead'); const { browserServer, transport } = await this._launchServer(options, 'local'); const browser = await FFBrowser.connect(transport!, options && options.slowMo); // Hack: for typical launch scenario, ensure that close waits for actual process termination. diff --git a/src/server/webkit.ts b/src/server/webkit.ts index 9a3297ef3c..4a53b2dcbd 100644 --- a/src/server/webkit.ts +++ b/src/server/webkit.ts @@ -62,6 +62,8 @@ export class WebKit implements BrowserType { } async launch(options?: LaunchOptions & { slowMo?: number }): Promise { + if (options && (options as any).userDataDir) + throw new Error('userDataDir option is not supported in `browserType.launch`. Use `browserType.launchPersistent` instead'); const { browserServer, transport } = await this._launchServer(options, 'local'); const browser = await WKBrowser.connect(transport!, options && options.slowMo); // Hack: for typical launch scenario, ensure that close waits for actual process termination. diff --git a/test/launcher.spec.js b/test/launcher.spec.js index c1bdb0af0f..fe81d51d9b 100644 --- a/test/launcher.spec.js +++ b/test/launcher.spec.js @@ -39,6 +39,12 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p await neverResolves; expect(error.message).toContain('Protocol error'); }); + it('should throw if userDataDir option is passed', async() => { + let waitError = null; + const options = Object.assign({}, defaultBrowserOptions, {userDataDir: 'random-path'}); + await playwright.launch(options).catch(e => waitError = e); + expect(waitError.message).toContain('launchPersistent'); + }); it('should reject if executable path is invalid', async({server}) => { let waitError = null; const options = Object.assign({}, defaultBrowserOptions, {executablePath: 'random-invalid-path'});