From 69452bb60e65da7ebfbabe384a7aad6a6ea9054b Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sat, 4 Nov 2023 19:28:09 +0100 Subject: [PATCH] Implement optionally running the tests in headless mode This commit prepares for running the font tests on GitHub Actions where we can't spin up headful browsers because there are no display capabilities on the workers. This will also be useful for porting other test targets to GitHub Actions at a later time, as well as running the tests locally in headless mode. --- gulpfile.mjs | 6 ++++++ test/test.mjs | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gulpfile.mjs b/gulpfile.mjs index 3103da494..43c66755a 100644 --- a/gulpfile.mjs +++ b/gulpfile.mjs @@ -684,6 +684,9 @@ function createTestSource(testsName, { bot = false, xfaOnly = false } = {}) { if (process.argv.includes("--noChrome") || forceNoChrome) { args.push("--noChrome"); } + if (process.argv.includes("--headless")) { + args.push("--headless"); + } const testProcess = startNode(args, { cwd: TEST_DIR, stdio: "inherit" }); testProcess.on("close", function (code) { @@ -712,6 +715,9 @@ function makeRef(done, bot) { if (process.argv.includes("--noChrome") || forceNoChrome) { args.push("--noChrome"); } + if (process.argv.includes("--headless")) { + args.push("--headless"); + } const testProcess = startNode(args, { cwd: TEST_DIR, stdio: "inherit" }); testProcess.on("close", function (code) { diff --git a/test/test.mjs b/test/test.mjs index bd14b8302..01b85a102 100644 --- a/test/test.mjs +++ b/test/test.mjs @@ -99,6 +99,12 @@ function parseOptions() { describe: "Uses default answers (intended for CLOUD TESTS only!).", type: "boolean", }) + .option("headless", { + default: false, + describe: + "Run the tests in headless mode, i.e. without visible browser windows.", + type: "boolean", + }) .option("port", { default: 0, describe: "The port the HTTP server should listen on.", @@ -252,6 +258,7 @@ function examineRefImages() { startBrowser({ browserName: "firefox", + headless: false, startUrl: `http://${host}:${server.port}/test/resources/reftest-analyzer.html#web=/test/eq.log`, }).then(function (browser) { browser.on("disconnected", function () { @@ -897,10 +904,12 @@ function unitTestPostHandler(req, res) { return true; } -async function startBrowser({ browserName, startUrl }) { +async function startBrowser({ browserName, headless, startUrl }) { const options = { product: browserName, - headless: false, + // Note that using `headless: true` gives a deprecation warning; see + // https://github.com/puppeteer/puppeteer#default-runtime-settings. + headless: headless === true ? "new" : false, defaultViewport: null, ignoreDefaultArgs: ["--disable-extensions"], // The timeout for individual protocol (CDP) calls should always be lower @@ -1006,7 +1015,7 @@ async function startBrowsers({ baseUrl, initializeSession }) { startUrl = baseUrl + queryParameters; } - await startBrowser({ browserName, startUrl }) + await startBrowser({ browserName, headless: options.headless, startUrl }) .then(function (browser) { session.browser = browser; initializeSession(session);