diff --git a/.changeset/violet-adults-brake.md b/.changeset/violet-adults-brake.md new file mode 100644 index 000000000..7f29272f8 --- /dev/null +++ b/.changeset/violet-adults-brake.md @@ -0,0 +1,11 @@ +--- +'@web/test-runner-chrome': minor +'@web/test-runner-puppeteer': minor +'@web/test-runner-visual-regression': minor +'@web/test-runner': minor +'@web/browser-logs': patch +'@web/dev-server': patch +'@web/dev-server-hmr': patch +--- + +Update puppeteer and puppeteer-core to 8.0.0 diff --git a/packages/browser-logs/package.json b/packages/browser-logs/package.json index 52c3acda5..72684f719 100644 --- a/packages/browser-logs/package.json +++ b/packages/browser-logs/package.json @@ -50,6 +50,6 @@ }, "devDependencies": { "@esm-bundle/chai": "^4.1.5", - "puppeteer": "^5.5.0" + "puppeteer": "^8.0.0" } } diff --git a/packages/dev-server-hmr/package.json b/packages/dev-server-hmr/package.json index 4b28550ac..6f8c49ad2 100644 --- a/packages/dev-server-hmr/package.json +++ b/packages/dev-server-hmr/package.json @@ -43,6 +43,6 @@ }, "devDependencies": { "lit-html": "^1.3.0", - "puppeteer": "^5.5.0" + "puppeteer": "^8.0.0" } } diff --git a/packages/dev-server-hmr/test/browser.test.ts b/packages/dev-server-hmr/test/browser.test.ts index a472bdc1f..33b607633 100644 --- a/packages/dev-server-hmr/test/browser.test.ts +++ b/packages/dev-server-hmr/test/browser.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { stubMethod } from 'hanbi'; import { createTestServer, expectIncludes } from '@web/dev-server-core/test-helpers'; -import { Browser, launch as launchPuppeteer, Page } from 'puppeteer'; +import { Browser, HTTPResponse, launch as launchPuppeteer, Page } from 'puppeteer'; import { posix as pathUtil } from 'path'; import { hmrPlugin } from '../src/index'; @@ -90,7 +90,7 @@ describe('browser tests', function () { files['/foo.js'] = files['/foo.js'].replace('" a "', '" b "'); server.fileWatcher.emit('change', pathUtil.join(__dirname, '/foo.js')); - await page.waitForResponse(r => r.url().startsWith(`${host}/foo.js`)); + await page.waitForResponse((r: HTTPResponse) => r.url().startsWith(`${host}/foo.js`)); expectIncludes(await page.content(), ' a b '); for (const error of errors) { @@ -122,7 +122,7 @@ describe('browser tests', function () { files['/bar.js'] = 'export default " b ";'; server.fileWatcher.emit('change', pathUtil.join(__dirname, '/bar.js')); - await page.waitForResponse(r => r.url().startsWith(`${host}/bar.js`)); + await page.waitForResponse((r: HTTPResponse) => r.url().startsWith(`${host}/bar.js`)); await new Promise(r => setTimeout(r, 1000)); expectIncludes(await page.content(), ' a b '); @@ -158,9 +158,9 @@ describe('browser tests', function () { files['/baz.js'] = 'export default " b ";'; server.fileWatcher.emit('change', pathUtil.join(__dirname, '/baz.js')); await Promise.all([ - page.waitForResponse(r => r.url().startsWith(`${host}/foo.js`)), - page.waitForResponse(r => r.url().startsWith(`${host}/bar.js`)), - page.waitForResponse(r => r.url().startsWith(`${host}/baz.js`)), + page.waitForResponse((r: HTTPResponse) => r.url().startsWith(`${host}/foo.js`)), + page.waitForResponse((r: HTTPResponse) => r.url().startsWith(`${host}/bar.js`)), + page.waitForResponse((r: HTTPResponse) => r.url().startsWith(`${host}/baz.js`)), ]); await new Promise(r => setTimeout(r, 1000)); expectIncludes(await page.content(), ' foo a bar a foo b bar b '); diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json index 1026b9140..705e14267 100644 --- a/packages/dev-server/package.json +++ b/packages/dev-server/package.json @@ -74,6 +74,6 @@ "devDependencies": { "@types/command-line-usage": "^5.0.1", "lit-html": "^1.3.0", - "puppeteer": "^5.5.0" + "puppeteer": "^8.0.0" } } diff --git a/packages/test-runner-chrome/package.json b/packages/test-runner-chrome/package.json index 0b2264d5b..e781e5e60 100644 --- a/packages/test-runner-chrome/package.json +++ b/packages/test-runner-chrome/package.json @@ -48,7 +48,7 @@ "@web/test-runner-core": "^0.10.8", "@web/test-runner-coverage-v8": "^0.4.5", "chrome-launcher": "^0.13.4", - "puppeteer-core": "^5.5.0" + "puppeteer-core": "^8.0.0" }, "devDependencies": { "@types/babel__code-frame": "^7.0.2", diff --git a/packages/test-runner-chrome/src/ChromeLauncher.ts b/packages/test-runner-chrome/src/ChromeLauncher.ts index 26ea736b5..27a000339 100644 --- a/packages/test-runner-chrome/src/ChromeLauncher.ts +++ b/packages/test-runner-chrome/src/ChromeLauncher.ts @@ -2,7 +2,7 @@ import * as puppeteerCore from 'puppeteer-core'; import { Browser, Page, - LaunchOptions, + PuppeteerNodeLaunchOptions, launch as puppeteerCoreLaunch, BrowserContext, } from 'puppeteer-core'; @@ -31,7 +31,7 @@ export class ChromeLauncher implements BrowserLauncher { public name: string; public type = 'puppeteer'; public concurrency?: number; - private launchOptions: LaunchOptions; + private launchOptions: PuppeteerNodeLaunchOptions; private customPuppeteer?: typeof puppeteerCore; private createBrowserContextFn: CreateBrowserContextFn; private createPageFn: CreatePageFn; @@ -48,7 +48,7 @@ export class ChromeLauncher implements BrowserLauncher { private __startBrowserPromise?: Promise<{ browser: Browser; context: BrowserContext }>; constructor( - launchOptions: LaunchOptions, + launchOptions: PuppeteerNodeLaunchOptions, createBrowserContextFn: CreateBrowserContextFn, createPageFn: CreatePageFn, customPuppeteer?: typeof puppeteerCore, @@ -63,7 +63,7 @@ export class ChromeLauncher implements BrowserLauncher { if (!customPuppeteer) { // without a custom puppeteer, we use the locally installed chrome this.name = 'Chrome'; - } else if (!this.launchOptions.product || this.launchOptions.product === 'chrome') { + } else if (!this.launchOptions?.product || this.launchOptions.product === 'chrome') { // with puppeteer we use the a packaged chromium, puppeteer calls it chrome but we // should call it chromium to avoid confusion this.name = 'Chromium'; @@ -78,7 +78,7 @@ export class ChromeLauncher implements BrowserLauncher { this.testFiles = testFiles; } - launchBrowser(options: LaunchOptions = {}) { + launchBrowser(options: PuppeteerNodeLaunchOptions = {}) { if (this.customPuppeteer) { const mergedOptions = { ...this.launchOptions, ...options }; // launch using a custom puppeteer instance @@ -114,7 +114,7 @@ export class ChromeLauncher implements BrowserLauncher { }); } - async startBrowser(options: LaunchOptions = {}) { + async startBrowser(options: PuppeteerNodeLaunchOptions = {}) { const browser = await this.launchBrowser(options); const context = await this.createBrowserContextFn({ config: this.config!, browser }); return { browser, context }; @@ -183,7 +183,7 @@ export class ChromeLauncher implements BrowserLauncher { return new ChromeLauncherPage( this.config!, this.testFiles!, - this.launchOptions.product ?? 'chromium', + this.launchOptions?.product ?? 'chromium', await puppeteerPagePromise, ); } diff --git a/packages/test-runner-chrome/src/index.ts b/packages/test-runner-chrome/src/index.ts index fa1c5ec76..5822f1393 100644 --- a/packages/test-runner-chrome/src/index.ts +++ b/packages/test-runner-chrome/src/index.ts @@ -1,10 +1,10 @@ import * as puppeteerCore from 'puppeteer-core'; import { ChromeLauncher, CreateBrowserContextFn, CreatePageFn } from './ChromeLauncher'; -import { LaunchOptions, devices } from 'puppeteer-core'; +import { PuppeteerNodeLaunchOptions, devices } from 'puppeteer-core'; export interface ChromeLauncherArgs { puppeteer?: typeof puppeteerCore; - launchOptions?: LaunchOptions; + launchOptions?: PuppeteerNodeLaunchOptions; createBrowserContext?: CreateBrowserContextFn; createPage?: CreatePageFn; concurrency?: number; diff --git a/packages/test-runner-puppeteer/package.json b/packages/test-runner-puppeteer/package.json index 2211be9dc..27fd6e52a 100644 --- a/packages/test-runner-puppeteer/package.json +++ b/packages/test-runner-puppeteer/package.json @@ -47,9 +47,10 @@ "dependencies": { "@web/test-runner-chrome": "^0.9.3", "@web/test-runner-core": "^0.10.8", - "puppeteer": "^5.5.0" + "puppeteer": "^8.0.0" }, "devDependencies": { - "@web/test-runner-mocha": "^0.7.2" + "@web/test-runner-mocha": "^0.7.2", + "puppeteer-core": "^8.0.0" } } diff --git a/packages/test-runner-puppeteer/src/puppeteerLauncher.ts b/packages/test-runner-puppeteer/src/puppeteerLauncher.ts index 01299c192..7c2f00a22 100644 --- a/packages/test-runner-puppeteer/src/puppeteerLauncher.ts +++ b/packages/test-runner-puppeteer/src/puppeteerLauncher.ts @@ -1,13 +1,12 @@ import * as puppeteer from 'puppeteer'; +import * as puppeteerCore from 'puppeteer-core'; +import { Browser, Page, PuppeteerNodeLaunchOptions } from 'puppeteer-core'; import { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; import { chromeLauncher } from '@web/test-runner-chrome'; export interface PuppeteerLauncherConfig { - launchOptions?: puppeteer.LaunchOptions; - createPage?: (args: { - config: TestRunnerCoreConfig; - browser: puppeteer.Browser; - }) => Promise; + launchOptions?: PuppeteerNodeLaunchOptions; + createPage?: (args: { config: TestRunnerCoreConfig; browser: Browser }) => Promise; concurrency?: number; } @@ -18,7 +17,7 @@ export function puppeteerLauncher({ }: PuppeteerLauncherConfig = {}): BrowserLauncher { return chromeLauncher({ launchOptions, - puppeteer: (puppeteer as any).default as typeof puppeteer, + puppeteer: (puppeteer as any).default as typeof puppeteerCore, createPage, concurrency, }); diff --git a/packages/test-runner-visual-regression/src/visualRegressionPlugin.ts b/packages/test-runner-visual-regression/src/visualRegressionPlugin.ts index f0fb24271..b2977eb8c 100644 --- a/packages/test-runner-visual-regression/src/visualRegressionPlugin.ts +++ b/packages/test-runner-visual-regression/src/visualRegressionPlugin.ts @@ -66,7 +66,7 @@ export function visualRegressionPlugin( ); } - const screenshot = await element.screenshot({ encoding: 'binary' }); + const screenshot = (await element.screenshot({ encoding: 'binary' })) as Buffer; return visualDiffCommand(mergedOptions, screenshot, session.browser.name, payload.name); } diff --git a/yarn.lock b/yarn.lock index 534fb805b..b032a89a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4590,6 +4590,11 @@ devtools-protocol@0.0.818844: resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.818844.tgz#d1947278ec85b53e4c8ca598f607a28fa785ba9e" integrity sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg== +devtools-protocol@0.0.854822: + version "0.0.854822" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.854822.tgz#eac3a5260a6b3b4e729a09fdc0c77b0d322e777b" + integrity sha512-xd4D8kHQtB0KtWW0c9xBZD5LVtm9chkMOfs/3Yn01RhT/sFIsVtzTtypfKoFfWBaL+7xCYLxjOLkhwPXaX/Kcg== + devtools-protocol@^0.0.849057: version "0.0.849057" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.849057.tgz#5fa64e2c5ad4499a30aa9e8da82613afc4b1aa77" @@ -9708,7 +9713,7 @@ pupa@^2.0.1: dependencies: escape-goat "^2.0.0" -puppeteer-core@^5.1.0, puppeteer-core@^5.5.0: +puppeteer-core@^5.1.0: version "5.5.0" resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-5.5.0.tgz#dfb6266efe5a933cbf1a368d27025a6fd4f5a884" integrity sha512-tlA+1n+ziW/Db03hVV+bAecDKse8ihFRXYiEypBe9IlLRvOCzYFG6qrCMBYK34HO/Q/Ecjc+tvkHRAfLVH+NgQ== @@ -9726,19 +9731,37 @@ puppeteer-core@^5.1.0, puppeteer-core@^5.5.0: unbzip2-stream "^1.3.3" ws "^7.2.3" -puppeteer@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.5.0.tgz#331a7edd212ca06b4a556156435f58cbae08af00" - integrity sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg== +puppeteer-core@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-8.0.0.tgz#4f56cc24675a8e993b0610a284f064a84910f4ec" + integrity sha512-kRTiGh42+4eiw9tl489p//8Zpg3LWmz0K3mOpv0qj5PsCV7jE43SLIi0E50suLh8OghXsFhJFoE98vEmXUnDew== dependencies: debug "^4.1.0" - devtools-protocol "0.0.818844" + devtools-protocol "0.0.854822" extract-zip "^2.0.0" - https-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" node-fetch "^2.6.1" pkg-dir "^4.2.0" progress "^2.0.1" - proxy-from-env "^1.0.0" + proxy-from-env "^1.1.0" + rimraf "^3.0.2" + tar-fs "^2.0.0" + unbzip2-stream "^1.3.3" + ws "^7.2.3" + +puppeteer@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-8.0.0.tgz#a236669118aa795331c2d0ca19877159e7664705" + integrity sha512-D0RzSWlepeWkxPPdK3xhTcefj8rjah1791GE82Pdjsri49sy11ci/JQsAO8K2NRukqvwEtcI+ImP5F4ZiMvtIQ== + dependencies: + debug "^4.1.0" + devtools-protocol "0.0.854822" + extract-zip "^2.0.0" + https-proxy-agent "^5.0.0" + node-fetch "^2.6.1" + pkg-dir "^4.2.0" + progress "^2.0.1" + proxy-from-env "^1.1.0" rimraf "^3.0.2" tar-fs "^2.0.0" unbzip2-stream "^1.3.3"