test: move user-data-dir tests into shared location (#603)

This commit is contained in:
Pavel Feldman 2020-01-23 12:18:41 -08:00 committed by GitHub
parent a5019ea69a
commit b4209e9dc8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 113 additions and 96 deletions

View file

@ -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() {

View file

@ -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() {

View file

@ -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 => {});
});
});
};

View file

@ -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);