test: move user-data-dir tests into shared location (#603)
This commit is contained in:
parent
a5019ea69a
commit
b4209e9dc8
|
|
@ -143,10 +143,6 @@ export class WKPlaywright implements Playwright {
|
||||||
throw new Error(missingText);
|
throw new Error(missingText);
|
||||||
webkitExecutable = executablePath;
|
webkitExecutable = executablePath;
|
||||||
}
|
}
|
||||||
webkitArguments.push('--inspector-pipe');
|
|
||||||
if (options.headless !== false)
|
|
||||||
webkitArguments.push('--headless');
|
|
||||||
|
|
||||||
let transport: PipeTransport | undefined = undefined;
|
let transport: PipeTransport | undefined = undefined;
|
||||||
|
|
||||||
const { launchedProcess, gracefullyClose } = await launchProcess({
|
const { launchedProcess, gracefullyClose } = await launchProcess({
|
||||||
|
|
@ -198,12 +194,15 @@ export class WKPlaywright implements Playwright {
|
||||||
|
|
||||||
defaultArgs(options: WebKitArgOptions = {}): string[] {
|
defaultArgs(options: WebKitArgOptions = {}): string[] {
|
||||||
const {
|
const {
|
||||||
|
headless = true,
|
||||||
args = [],
|
args = [],
|
||||||
userDataDir = null
|
userDataDir = null
|
||||||
} = options;
|
} = options;
|
||||||
const webkitArguments = [...DEFAULT_ARGS];
|
const webkitArguments = ['--inspector-pipe'];
|
||||||
if (userDataDir)
|
if (userDataDir)
|
||||||
webkitArguments.push(`--user-data-dir=${userDataDir}`);
|
webkitArguments.push(`--user-data-dir=${userDataDir}`);
|
||||||
|
if (headless)
|
||||||
|
webkitArguments.push('--headless');
|
||||||
webkitArguments.push(...args);
|
webkitArguments.push(...args);
|
||||||
return webkitArguments;
|
return webkitArguments;
|
||||||
}
|
}
|
||||||
|
|
@ -256,7 +255,6 @@ export class WKPlaywright implements Playwright {
|
||||||
const mkdtempAsync = platform.promisify(fs.mkdtemp);
|
const mkdtempAsync = platform.promisify(fs.mkdtemp);
|
||||||
|
|
||||||
const WEBKIT_PROFILE_PATH = path.join(os.tmpdir(), 'playwright_dev_profile-');
|
const WEBKIT_PROFILE_PATH = path.join(os.tmpdir(), 'playwright_dev_profile-');
|
||||||
const DEFAULT_ARGS: string[] = [];
|
|
||||||
|
|
||||||
let cachedMacVersion: string | undefined = undefined;
|
let cachedMacVersion: string | undefined = undefined;
|
||||||
function getMacVersion() {
|
function getMacVersion() {
|
||||||
|
|
|
||||||
|
|
@ -32,53 +32,6 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
|
|
||||||
describe('CrPlaywright', function() {
|
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() {
|
describe('Playwright.launch |browserURL| option', function() {
|
||||||
it('should be able to connect using browserUrl, with and without trailing slash', async({server}) => {
|
it('should be able to connect using browserUrl, with and without trailing slash', async({server}) => {
|
||||||
const originalBrowser = await playwright.launch(Object.assign({}, defaultBrowserOptions, {
|
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');
|
expect(error.message).toContain('Failed to fetch browser webSocket url from');
|
||||||
originalBrowser.close();
|
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() {
|
describe('Playwright.launch |pipe| option', function() {
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,17 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
const os = require('os');
|
||||||
const path = require('path');
|
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 {describe, xdescribe, fdescribe} = testRunner;
|
||||||
const {it, fit, xit, dit} = testRunner;
|
const {it, fit, xit, dit} = testRunner;
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
|
|
@ -181,4 +188,104 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
|
||||||
await browserServer.close();
|
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 => {});
|
||||||
|
});
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -21,12 +21,6 @@ module.exports.describe = function ({ testRunner, expect, playwright, defaultBro
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
|
|
||||||
describe('WKPlaywright', function() {
|
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() {
|
describe('Playwright.launch |pipe| option', function() {
|
||||||
it('should have websocket by default', async() => {
|
it('should have websocket by default', async() => {
|
||||||
const options = Object.assign({pipe: false}, defaultBrowserOptions);
|
const options = Object.assign({pipe: false}, defaultBrowserOptions);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue