From 5cb19c626554fb64500cc0c8758eca5cc4231f93 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Fri, 31 Jan 2020 08:54:11 -0800 Subject: [PATCH] test: extract common headful tests (#785) --- test/chromium/headful.spec.js | 36 +---------------- test/headful.spec.js | 75 +++++++++++++++++++++++++++++++++++ test/playwright.spec.js | 1 + 3 files changed, 77 insertions(+), 35 deletions(-) create mode 100644 test/headful.spec.js diff --git a/test/chromium/headful.spec.js b/test/chromium/headful.spec.js index 4aa4b9a574..cc4497cab9 100644 --- a/test/chromium/headful.spec.js +++ b/test/chromium/headful.spec.js @@ -44,7 +44,7 @@ module.exports.describe = function({testRunner, expect, playwright, defaultBrows ], }); - describe('HEADFUL', function() { + describe('ChromiumHeadful', function() { it('background_page target type should be available', async() => { const browserWithExtension = await playwright.launch(extensionOptions); const page = await browserWithExtension.defaultContext().newPage(); @@ -61,31 +61,6 @@ module.exports.describe = function({testRunner, expect, playwright, defaultBrows expect(await page.evaluate(() => window.MAGIC)).toBe(42); await browserWithExtension.close(); }); - it('should have default url when launching browser', async function() { - const browser = await playwright.launch(extensionOptions); - const pages = (await browser.defaultContext().pages()).map(page => page.url()); - expect(pages).toEqual(['about:blank']); - await browser.close(); - }); - // see https://github.com/microsoft/playwright/issues/717 - it.skip(WIN && CHROMIUM)('headless should be able to read cookies written by headful', async({server}) => { - const userDataDir = await mkdtempAsync(TMP_FOLDER); - // Write a cookie in headful chrome - const headfulBrowser = await playwright.launch(Object.assign({userDataDir}, headfulOptions)); - const headfulPage = await headfulBrowser.defaultContext().newPage(); - await headfulPage.goto(server.EMPTY_PAGE); - await headfulPage.evaluate(() => document.cookie = 'foo=true; expires=Fri, 31 Dec 9999 23:59:59 GMT'); - await headfulBrowser.close(); - // Read the cookie from headless chrome - const headlessBrowser = await playwright.launch(Object.assign({userDataDir}, headlessOptions)); - const headlessPage = await headlessBrowser.defaultContext().newPage(); - await headlessPage.goto(server.EMPTY_PAGE); - const cookie = await headlessPage.evaluate(() => document.cookie); - await headlessBrowser.close(); - // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 - await rmAsync(userDataDir).catch(e => {}); - expect(cookie).toBe('foo=true'); - }); // TODO: Support OOOPIF. @see https://github.com/GoogleChrome/puppeteer/issues/2548 xit('OOPIF: should report google.com frame', async({server}) => { // https://google.com is isolated by default in Chromium embedder. @@ -108,15 +83,6 @@ module.exports.describe = function({testRunner, expect, playwright, defaultBrows ]); await browser.close(); }); - it('should close browser with beforeunload page', async({server}) => { - const browser = await playwright.launch(headfulOptions); - const page = await browser.defaultContext().newPage(); - await page.goto(server.PREFIX + '/beforeunload.html'); - // We have to interact with a page so that 'beforeunload' handlers - // fire. - await page.click('body'); - await browser.close(); - }); it('should open devtools when "devtools: true" option is given', async({server}) => { const browser = await playwright.launch(Object.assign({devtools: true}, headfulOptions)); const context = await browser.newContext(); diff --git a/test/headful.spec.js b/test/headful.spec.js new file mode 100644 index 0000000000..516329af6c --- /dev/null +++ b/test/headful.spec.js @@ -0,0 +1,75 @@ +/** + * Copyright 2018 Google Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const path = require('path'); +const os = require('os'); +const fs = require('fs'); +const util = require('util'); + +const rmAsync = util.promisify(require('rimraf')); +const mkdtempAsync = util.promisify(fs.mkdtemp); + +const TMP_FOLDER = path.join(os.tmpdir(), 'pw_tmp_folder-'); + +module.exports.describe = function({testRunner, expect, playwright, defaultBrowserOptions, FFOX, CHROMIUM, WEBKIT, WIN}) { + const {describe, xdescribe, fdescribe} = testRunner; + const {it, fit, xit, dit} = testRunner; + const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; + + const headfulOptions = Object.assign({}, defaultBrowserOptions, { + headless: false + }); + const headlessOptions = Object.assign({}, defaultBrowserOptions, { + headless: true + }); + + describe('Headful', function() { + it('should have default url when launching browser', async function() { + const browser = await playwright.launch(headfulOptions); + const pages = (await browser.defaultContext().pages()).map(page => page.url()); + expect(pages).toEqual(['about:blank']); + await browser.close(); + }); + // see https://github.com/microsoft/playwright/issues/717 + it.skip((WIN && CHROMIUM) || FFOX)('headless should be able to read cookies written by headful', async({server}) => { + const userDataDir = await mkdtempAsync(TMP_FOLDER); + // Write a cookie in headful chrome + const headfulBrowser = await playwright.launch(Object.assign({userDataDir}, headfulOptions)); + const headfulPage = await headfulBrowser.defaultContext().newPage(); + await headfulPage.goto(server.EMPTY_PAGE); + await headfulPage.evaluate(() => document.cookie = 'foo=true; expires=Fri, 31 Dec 9999 23:59:59 GMT'); + await headfulBrowser.close(); + // Read the cookie from headless chrome + const headlessBrowser = await playwright.launch(Object.assign({userDataDir}, headlessOptions)); + const headlessPage = await headlessBrowser.defaultContext().newPage(); + await headlessPage.goto(server.EMPTY_PAGE); + const cookie = await headlessPage.evaluate(() => document.cookie); + await headlessBrowser.close(); + // This might throw. See https://github.com/GoogleChrome/puppeteer/issues/2778 + await rmAsync(userDataDir).catch(e => {}); + expect(cookie).toBe('foo=true'); + }); + it.skip(FFOX)('should close browser with beforeunload page', async({server}) => { + const browser = await playwright.launch(headfulOptions); + const page = await browser.defaultContext().newPage(); + await page.goto(server.PREFIX + '/beforeunload.html'); + // We have to interact with a page so that 'beforeunload' handlers + // fire. + await page.click('body'); + await browser.close(); + }); + }); +}; diff --git a/test/playwright.spec.js b/test/playwright.spec.js index 515a41ff95..385e5a492b 100644 --- a/test/playwright.spec.js +++ b/test/playwright.spec.js @@ -197,6 +197,7 @@ module.exports.describe = ({testRunner, product, playwrightPath}) => { testRunner.loadTests(require('./defaultbrowsercontext.spec.js'), testOptions); testRunner.loadTests(require('./fixtures.spec.js'), testOptions); testRunner.loadTests(require('./launcher.spec.js'), testOptions); + testRunner.loadTests(require('./headful.spec.js'), testOptions); if (CHROMIUM) { testRunner.loadTests(require('./chromium/launcher.spec.js'), testOptions);