diff --git a/src/server/wkPlaywright.ts b/src/server/wkPlaywright.ts index 44166a9f6b..d90004445a 100644 --- a/src/server/wkPlaywright.ts +++ b/src/server/wkPlaywright.ts @@ -143,10 +143,6 @@ export class WKPlaywright implements Playwright { throw new Error(missingText); webkitExecutable = executablePath; } - webkitArguments.push('--inspector-pipe'); - if (options.headless !== false) - webkitArguments.push('--headless'); - let transport: PipeTransport | undefined = undefined; const { launchedProcess, gracefullyClose } = await launchProcess({ @@ -198,12 +194,15 @@ export class WKPlaywright implements Playwright { defaultArgs(options: WebKitArgOptions = {}): string[] { const { + headless = true, args = [], userDataDir = null } = options; - const webkitArguments = [...DEFAULT_ARGS]; + const webkitArguments = ['--inspector-pipe']; if (userDataDir) webkitArguments.push(`--user-data-dir=${userDataDir}`); + if (headless) + webkitArguments.push('--headless'); webkitArguments.push(...args); return webkitArguments; } @@ -256,7 +255,6 @@ export class WKPlaywright implements Playwright { const mkdtempAsync = platform.promisify(fs.mkdtemp); const WEBKIT_PROFILE_PATH = path.join(os.tmpdir(), 'playwright_dev_profile-'); -const DEFAULT_ARGS: string[] = []; let cachedMacVersion: string | undefined = undefined; function getMacVersion() { diff --git a/test/chromium/launcher.spec.js b/test/chromium/launcher.spec.js index 6bd2221b65..9e0b8016c5 100644 --- a/test/chromium/launcher.spec.js +++ b/test/chromium/launcher.spec.js @@ -32,53 +32,6 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; describe('CrPlaywright', function() { - describe('Playwright.launch', function() { - it('userDataDir option', async({server}) => { - const userDataDir = await mkdtempAsync(TMP_FOLDER); - const options = Object.assign({userDataDir}, defaultBrowserOptions); - const browser = await playwright.launch(options); - // Open a page to make sure its functional. - await browser.defaultContext().newPage(); - expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); - await browser.close(); - expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); - // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 - await rmAsync(userDataDir).catch(e => {}); - }); - it('userDataDir argument', async({server}) => { - const userDataDir = await mkdtempAsync(TMP_FOLDER); - const options = Object.assign({}, defaultBrowserOptions); - options.args = [ - ...(defaultBrowserOptions.args || []), - `--user-data-dir=${userDataDir}` - ]; - const browser = await playwright.launch(options); - expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); - await browser.close(); - expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); - // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 - await rmAsync(userDataDir).catch(e => {}); - }); - it('should return the default arguments', async() => { - expect(playwright.defaultArgs()).toContain('--no-first-run'); - expect(playwright.defaultArgs()).toContain('--headless'); - expect(playwright.defaultArgs({headless: false})).not.toContain('--headless'); - expect(playwright.defaultArgs({userDataDir: 'foo'})).toContain('--user-data-dir=foo'); - }); - it('should filter out ignored default arguments', async() => { - // Make sure we launch with `--enable-automation` by default. - const defaultArgs = playwright.defaultArgs(defaultBrowserOptions); - const browserServer = await playwright.launchServer(Object.assign({}, defaultBrowserOptions, { - // Ignore first and third default argument. - ignoreDefaultArgs: [ defaultArgs[0], defaultArgs[2] ], - })); - const spawnargs = browserServer.process().spawnargs; - expect(spawnargs.indexOf(defaultArgs[0])).toBe(-1); - expect(spawnargs.indexOf(defaultArgs[1])).not.toBe(-1); - expect(spawnargs.indexOf(defaultArgs[2])).toBe(-1); - await browserServer.close(); - }); - }); describe('Playwright.launch |browserURL| option', function() { it('should be able to connect using browserUrl, with and without trailing slash', async({server}) => { const originalBrowser = await playwright.launch(Object.assign({}, defaultBrowserOptions, { @@ -120,41 +73,6 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p expect(error.message).toContain('Failed to fetch browser webSocket url from'); originalBrowser.close(); }); - it('userDataDir option should restore state', async({server}) => { - const userDataDir = await mkdtempAsync(TMP_FOLDER); - const options = Object.assign({userDataDir}, defaultBrowserOptions); - const browser = await playwright.launch(options); - const page = await browser.defaultContext().newPage(); - await page.goto(server.EMPTY_PAGE); - await page.evaluate(() => localStorage.hey = 'hello'); - await browser.close(); - - const browser2 = await playwright.launch(options); - const page2 = await browser2.defaultContext().newPage(); - await page2.goto(server.EMPTY_PAGE); - expect(await page2.evaluate(() => localStorage.hey)).toBe('hello'); - await browser2.close(); - // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 - await rmAsync(userDataDir).catch(e => {}); - }); - // This mysteriously fails on Windows on AppVeyor. See https://github.com/GoogleChrome/puppeteer/issues/4111 - it('userDataDir option should restore cookies', async({server}) => { - const userDataDir = await mkdtempAsync(TMP_FOLDER); - const options = Object.assign({userDataDir}, defaultBrowserOptions); - const browser = await playwright.launch(options); - const page = await browser.defaultContext().newPage(); - await page.goto(server.EMPTY_PAGE); - await page.evaluate(() => document.cookie = 'doSomethingOnlyOnce=true; expires=Fri, 31 Dec 9999 23:59:59 GMT'); - await browser.close(); - - const browser2 = await playwright.launch(options); - const page2 = await browser2.defaultContext().newPage(); - await page2.goto(server.EMPTY_PAGE); - expect(await page2.evaluate(() => document.cookie)).toBe('doSomethingOnlyOnce=true'); - await browser2.close(); - // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 - await rmAsync(userDataDir).catch(e => {}); - }); }); describe('Playwright.launch |pipe| option', function() { diff --git a/test/launcher.spec.js b/test/launcher.spec.js index 24d06b9d2b..d5883717b1 100644 --- a/test/launcher.spec.js +++ b/test/launcher.spec.js @@ -15,10 +15,17 @@ * limitations under the License. */ const fs = require('fs'); +const os = require('os'); const path = require('path'); -const utils = require('./utils'); +const util = require('util'); -module.exports.describe = function({testRunner, expect, defaultBrowserOptions, playwright, WEBKIT}) { +const utils = require('./utils'); +const rmAsync = util.promisify(require('rimraf')); +const mkdtempAsync = util.promisify(fs.mkdtemp); + +const TMP_FOLDER = path.join(os.tmpdir(), 'pptr_tmp_folder-'); + +module.exports.describe = function({testRunner, expect, defaultBrowserOptions, playwright, CHROMIUM, FFOX, WEBKIT}) { const {describe, xdescribe, fdescribe} = testRunner; const {it, fit, xit, dit} = testRunner; const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; @@ -181,4 +188,104 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p await browserServer.close(); }); }); + + describe.skip(FFOX | WEBKIT)('Playwright.launch({userDataDir})', function() { + it('userDataDir option', async({server}) => { + const userDataDir = await mkdtempAsync(TMP_FOLDER); + const options = Object.assign({userDataDir}, defaultBrowserOptions); + const browser = await playwright.launch(options); + // Open a page to make sure its functional. + await browser.defaultContext().newPage(); + expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); + await browser.close(); + expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); + // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 + await rmAsync(userDataDir).catch(e => {}); + }); + it('userDataDir argument', async({server}) => { + const userDataDir = await mkdtempAsync(TMP_FOLDER); + const options = Object.assign({}, defaultBrowserOptions); + options.args = [ + ...(defaultBrowserOptions.args || []), + `--user-data-dir=${userDataDir}` + ]; + const browser = await playwright.launch(options); + // Open a page to make sure its functional. + await browser.defaultContext().newPage(); + expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); + await browser.close(); + expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); + // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 + await rmAsync(userDataDir).catch(e => {}); + }); + it('should return the default arguments', async() => { + if (CHROMIUM) + expect(playwright.defaultArgs()).toContain('--no-first-run'); + expect(playwright.defaultArgs()).toContain('--headless'); + expect(playwright.defaultArgs({headless: false})).not.toContain('--headless'); + expect(playwright.defaultArgs({userDataDir: 'foo'})).toContain('--user-data-dir=foo'); + }); + it('should filter out ignored default arguments', async() => { + // Make sure we launch with `--enable-automation` by default. + const defaultArgs = playwright.defaultArgs(defaultBrowserOptions); + const browserServer = await playwright.launchServer(Object.assign({}, defaultBrowserOptions, { + // Ignore first and third default argument. + ignoreDefaultArgs: [ defaultArgs[0], defaultArgs[2] ], + })); + const spawnargs = browserServer.process().spawnargs; + expect(spawnargs.indexOf(defaultArgs[0])).toBe(-1); + expect(spawnargs.indexOf(defaultArgs[1])).not.toBe(-1); + expect(spawnargs.indexOf(defaultArgs[2])).toBe(-1); + await browserServer.close(); + }); + it('userDataDir option should restore state', async({server}) => { + const userDataDir = await mkdtempAsync(TMP_FOLDER); + const options = Object.assign({userDataDir}, defaultBrowserOptions); + const browser = await playwright.launch(options); + const page = await browser.defaultContext().newPage(); + await page.goto(server.EMPTY_PAGE); + await page.evaluate(() => localStorage.hey = 'hello'); + await browser.close(); + + const browser2 = await playwright.launch(options); + const page2 = await browser2.defaultContext().newPage(); + await page2.goto(server.EMPTY_PAGE); + expect(await page2.evaluate(() => localStorage.hey)).toBe('hello'); + await browser2.close(); + + const browser3 = await playwright.launch(defaultBrowserOptions); + const page3 = await browser3.defaultContext().newPage(); + await page3.goto(server.EMPTY_PAGE); + expect(await page3.evaluate(() => localStorage.hey)).not.toBe('hello'); + await browser3.close(); + + // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 + await rmAsync(userDataDir).catch(e => {}); + }); + // This mysteriously fails on Windows on AppVeyor. See https://github.com/GoogleChrome/puppeteer/issues/4111 + it('userDataDir option should restore cookies', async({server}) => { + const userDataDir = await mkdtempAsync(TMP_FOLDER); + const options = Object.assign({userDataDir}, defaultBrowserOptions); + const browser = await playwright.launch(options); + const page = await browser.defaultContext().newPage(); + await page.goto(server.EMPTY_PAGE); + await page.evaluate(() => document.cookie = 'doSomethingOnlyOnce=true; expires=Fri, 31 Dec 9999 23:59:59 GMT'); + await browser.close(); + + const browser2 = await playwright.launch(options); + const page2 = await browser2.defaultContext().newPage(); + await page2.goto(server.EMPTY_PAGE); + expect(await page2.evaluate(() => document.cookie)).toBe('doSomethingOnlyOnce=true'); + await browser2.close(); + + const browser3 = await playwright.launch(defaultBrowserOptions); + const page3 = await browser3.defaultContext().newPage(); + await page3.goto(server.EMPTY_PAGE); + expect(await page3.evaluate(() => localStorage.hey)).not.toBe('doSomethingOnlyOnce=true'); + await browser3.close(); + + // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 + await rmAsync(userDataDir).catch(e => {}); + }); + }); }; diff --git a/test/webkit/launcher.spec.js b/test/webkit/launcher.spec.js index 37662731c9..3074da3d7d 100644 --- a/test/webkit/launcher.spec.js +++ b/test/webkit/launcher.spec.js @@ -21,12 +21,6 @@ module.exports.describe = function ({ testRunner, expect, playwright, defaultBro const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; describe('WKPlaywright', function() { - describe('Playwright.launch', function() { - it('should return the default arguments', async() => { - expect(playwright.defaultArgs().length).toBe(0); - }); - }); - describe('Playwright.launch |pipe| option', function() { it('should have websocket by default', async() => { const options = Object.assign({pipe: false}, defaultBrowserOptions);