chore: roll Electron to 16.2.8 (#16017)

This commit is contained in:
Max Schmitt 2022-07-28 15:41:32 +02:00 committed by GitHub
parent abf951ebec
commit 6482ff7a7f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 63 additions and 78 deletions

33
package-lock.json generated
View file

@ -39,7 +39,8 @@
"concurrently": "^6.2.1", "concurrently": "^6.2.1",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"dotenv": "^16.0.0", "dotenv": "^16.0.0",
"electron": "^12.2.1", "electron": "^16.2.8",
"electron-to-chromium": "^1.4.204",
"enquirer": "^2.3.6", "enquirer": "^2.3.6",
"eslint": "^8.8.0", "eslint": "^8.8.0",
"eslint-plugin-notice": "^0.9.10", "eslint-plugin-notice": "^0.9.10",
@ -2822,13 +2823,13 @@
"dev": true "dev": true
}, },
"node_modules/electron": { "node_modules/electron": {
"version": "12.2.3", "version": "16.2.8",
"resolved": "https://registry.npmjs.org/electron/-/electron-12.2.3.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-16.2.8.tgz",
"integrity": "sha512-B27c7eqx1bC5kea6An8oVhk1pShNC4VGqWarHMhD47MDtmg54KepHO5AbAvmKKZK/jWN7NTC7wyCYTDElJNtQA==", "integrity": "sha512-KSOytY6SPLsh3iCziztqa/WgJyfDOKzCvNqku9gGIqSdT8CqtV66dTU1SOrKZQjRFLxHaF8LbyxUL1vwe4taqw==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@electron/get": "^1.0.1", "@electron/get": "^1.13.0",
"@types/node": "^14.6.2", "@types/node": "^14.6.2",
"extract-zip": "^1.0.3" "extract-zip": "^1.0.3"
}, },
@ -2840,9 +2841,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.143", "version": "1.4.204",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.143.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.204.tgz",
"integrity": "sha512-2hIgvu0+pDfXIqmVmV5X6iwMjQ2KxDsWKwM+oI1fABEOy/Dqmll0QJRmIQ3rm+XaoUa/qKrmy5h7LSTFQ6Ldzg==" "integrity": "sha512-5Ojjtw9/c9HCXtMVE6SXVSHSNjmbFOXpKprl6mY/5moLSxLeWatuYA7KTD+RzJMxLRH6yNNQrqGz9p6IoNBMgw=="
}, },
"node_modules/electron/node_modules/@types/node": { "node_modules/electron/node_modules/@types/node": {
"version": "14.18.10", "version": "14.18.10",
@ -7487,7 +7488,7 @@
"requires": { "requires": {
"@playwright/test": "1.25.0-next", "@playwright/test": "1.25.0-next",
"@sveltejs/vite-plugin-svelte": "^1.0.1", "@sveltejs/vite-plugin-svelte": "^1.0.1",
"svelte": "*", "svelte": "^3.49.0",
"vite": "^3.0.0" "vite": "^3.0.0"
}, },
"dependencies": { "dependencies": {
@ -8816,12 +8817,12 @@
"dev": true "dev": true
}, },
"electron": { "electron": {
"version": "12.2.3", "version": "16.2.8",
"resolved": "https://registry.npmjs.org/electron/-/electron-12.2.3.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-16.2.8.tgz",
"integrity": "sha512-B27c7eqx1bC5kea6An8oVhk1pShNC4VGqWarHMhD47MDtmg54KepHO5AbAvmKKZK/jWN7NTC7wyCYTDElJNtQA==", "integrity": "sha512-KSOytY6SPLsh3iCziztqa/WgJyfDOKzCvNqku9gGIqSdT8CqtV66dTU1SOrKZQjRFLxHaF8LbyxUL1vwe4taqw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@electron/get": "^1.0.1", "@electron/get": "^1.13.0",
"@types/node": "^14.6.2", "@types/node": "^14.6.2",
"extract-zip": "^1.0.3" "extract-zip": "^1.0.3"
}, },
@ -8862,9 +8863,9 @@
} }
}, },
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.4.143", "version": "1.4.204",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.143.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.204.tgz",
"integrity": "sha512-2hIgvu0+pDfXIqmVmV5X6iwMjQ2KxDsWKwM+oI1fABEOy/Dqmll0QJRmIQ3rm+XaoUa/qKrmy5h7LSTFQ6Ldzg==" "integrity": "sha512-5Ojjtw9/c9HCXtMVE6SXVSHSNjmbFOXpKprl6mY/5moLSxLeWatuYA7KTD+RzJMxLRH6yNNQrqGz9p6IoNBMgw=="
}, },
"emoji-regex": { "emoji-regex": {
"version": "8.0.0", "version": "8.0.0",

View file

@ -74,7 +74,8 @@
"concurrently": "^6.2.1", "concurrently": "^6.2.1",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"dotenv": "^16.0.0", "dotenv": "^16.0.0",
"electron": "^12.2.1", "electron": "^16.2.8",
"electron-to-chromium": "^1.4.204",
"enquirer": "^2.3.6", "enquirer": "^2.3.6",
"eslint": "^8.8.0", "eslint": "^8.8.0",
"eslint-plugin-notice": "^0.9.10", "eslint-plugin-notice": "^0.9.10",

View file

@ -21,6 +21,8 @@ import type { PageTestFixtures, PageWorkerFixtures } from '../page/pageTestApi';
import type { TraceViewerFixtures } from '../config/traceViewerFixtures'; import type { TraceViewerFixtures } from '../config/traceViewerFixtures';
import { traceViewerFixtures } from '../config/traceViewerFixtures'; import { traceViewerFixtures } from '../config/traceViewerFixtures';
export { expect } from '@playwright/test'; export { expect } from '@playwright/test';
import e2c from 'electron-to-chromium';
import { assert } from 'playwright-core/lib/utils';
type ElectronTestFixtures = PageTestFixtures & { type ElectronTestFixtures = PageTestFixtures & {
electronApp: ElectronApplication; electronApp: ElectronApplication;
@ -28,10 +30,12 @@ type ElectronTestFixtures = PageTestFixtures & {
}; };
const electronVersion = require('electron/package.json').version; const electronVersion = require('electron/package.json').version;
const chromiumVersion = e2c.fullVersions[electronVersion];
assert(chromiumVersion, `Chromium version for Electron version ${electronVersion} is not found.`);
export const electronTest = baseTest.extend<TraceViewerFixtures>(traceViewerFixtures).extend<ElectronTestFixtures, PageWorkerFixtures>({ export const electronTest = baseTest.extend<TraceViewerFixtures>(traceViewerFixtures).extend<ElectronTestFixtures, PageWorkerFixtures>({
browserVersion: [electronVersion, { scope: 'worker' }], browserVersion: [chromiumVersion, { scope: 'worker' }],
browserMajorVersion: [Number(electronVersion.split('.')[0]), { scope: 'worker' }], browserMajorVersion: [Number(chromiumVersion.split('.')[0]), { scope: 'worker' }],
isAndroid: [false, { scope: 'worker' }], isAndroid: [false, { scope: 'worker' }],
isElectron: [true, { scope: 'worker' }], isElectron: [true, { scope: 'worker' }],

View file

@ -73,9 +73,7 @@ it('should work for detached elements', async ({ page, server }) => {
expect(await divHandle.ownerFrame()).toBe(page.mainFrame()); expect(await divHandle.ownerFrame()).toBe(page.mainFrame());
}); });
it('should work for adopted elements', async ({ page, server, isElectron }) => { it('should work for adopted elements', async ({ page, server }) => {
it.fixme(isElectron);
await page.goto(server.EMPTY_PAGE); await page.goto(server.EMPTY_PAGE);
const [popup] = await Promise.all([ const [popup] = await Promise.all([
page.waitForEvent('popup'), page.waitForEvent('popup'),

View file

@ -34,9 +34,7 @@ it('should return null for non-existing element', async ({ page, server }) => {
expect(second).toBe(null); expect(second).toBe(null);
}); });
it('should work for adopted elements', async ({ page, server, isElectron }) => { it('should work for adopted elements', async ({ page, server }) => {
it.fixme(isElectron);
await page.goto(server.EMPTY_PAGE); await page.goto(server.EMPTY_PAGE);
const [popup] = await Promise.all([ const [popup] = await Promise.all([
page.waitForEvent('popup'), page.waitForEvent('popup'),

View file

@ -203,18 +203,14 @@ it.describe('element screenshot', () => {
expect(screenshot).toMatchSnapshot('screenshot-element-bounding-box.png'); expect(screenshot).toMatchSnapshot('screenshot-element-bounding-box.png');
}); });
it('should work for an element with fractional dimensions', async ({ page, isElectron }) => { it('should work for an element with fractional dimensions', async ({ page }) => {
it.fixme(isElectron, 'Scale is wrong');
await page.setContent('<div style="width:48.51px;height:19.8px;border:1px solid black;"></div>'); await page.setContent('<div style="width:48.51px;height:19.8px;border:1px solid black;"></div>');
const elementHandle = await page.$('div'); const elementHandle = await page.$('div');
const screenshot = await elementHandle.screenshot(); const screenshot = await elementHandle.screenshot();
expect(screenshot).toMatchSnapshot('screenshot-element-fractional.png'); expect(screenshot).toMatchSnapshot('screenshot-element-fractional.png');
}); });
it('should work for an element with an offset', async ({ page, isElectron }) => { it('should work for an element with an offset', async ({ page }) => {
it.fixme(isElectron, 'Scale is wrong');
await page.setContent('<div style="position:absolute; top: 10.3px; left: 20.4px;width:50.3px;height:20.2px;border:1px solid black;"></div>'); await page.setContent('<div style="position:absolute; top: 10.3px; left: 20.4px;width:50.3px;height:20.2px;border:1px solid black;"></div>');
const elementHandle = await page.$('div'); const elementHandle = await page.$('div');
const screenshot = await elementHandle.screenshot(); const screenshot = await elementHandle.screenshot();

View file

@ -97,9 +97,8 @@ it('should allow cross-frame element handles', async ({ page, server }) => {
expect(result.trim()).toBe('<div>Hi, I\'m frame</div>'); expect(result.trim()).toBe('<div>Hi, I\'m frame</div>');
}); });
it('should not allow cross-frame element handles when frames do not script each other', async ({ page, server, isElectron, isAndroid }) => { it('should not allow cross-frame element handles when frames do not script each other', async ({ page, server, isAndroid }) => {
it.skip(isAndroid, 'No cross-process on Android'); it.skip(isAndroid, 'No cross-process on Android');
it.fixme(isElectron);
await page.goto(server.EMPTY_PAGE); await page.goto(server.EMPTY_PAGE);
const frame = await attachFrame(page, 'frame1', server.CROSS_PROCESS_PREFIX + '/empty.html'); const frame = await attachFrame(page, 'frame1', server.CROSS_PROCESS_PREFIX + '/empty.html');

View file

@ -154,9 +154,7 @@ it('should report frame from-inside shadow DOM', async ({ page, server }) => {
expect(page.frames()[1].url()).toBe(server.EMPTY_PAGE); expect(page.frames()[1].url()).toBe(server.EMPTY_PAGE);
}); });
it('should report frame.name()', async ({ page, server, isElectron }) => { it('should report frame.name()', async ({ page, server }) => {
it.fixme(isElectron);
await attachFrame(page, 'theFrameId', server.EMPTY_PAGE); await attachFrame(page, 'theFrameId', server.EMPTY_PAGE);
await page.evaluate(url => { await page.evaluate(url => {
const frame = document.createElement('iframe'); const frame = document.createElement('iframe');
@ -178,8 +176,7 @@ it('should report frame.parent()', async ({ page, server }) => {
expect(page.frames()[2].parentFrame()).toBe(page.mainFrame()); expect(page.frames()[2].parentFrame()).toBe(page.mainFrame());
}); });
it('should report different frame instance when frame re-attaches', async ({ page, server, isElectron }) => { it('should report different frame instance when frame re-attaches', async ({ page, server }) => {
it.fixme(isElectron);
const frame1 = await attachFrame(page, 'frame1', server.EMPTY_PAGE); const frame1 = await attachFrame(page, 'frame1', server.EMPTY_PAGE);
await page.evaluate(() => { await page.evaluate(() => {

View file

@ -113,9 +113,8 @@ it('should intercept network activity from worker', async function({ page, serve
expect(msg.text()).toBe('intercepted'); expect(msg.text()).toBe('intercepted');
}); });
it('should intercept network activity from worker 2', async function({ page, server, isElectron, isAndroid, browserName, browserMajorVersion }) { it('should intercept network activity from worker 2', async function({ page, server, isAndroid }) {
it.skip(isAndroid); it.skip(isAndroid);
it.fixme(isElectron);
const url = server.PREFIX + '/worker/worker.js'; const url = server.PREFIX + '/worker/worker.js';
await page.route(url, route => { await page.route(url, route => {
@ -132,9 +131,7 @@ it('should intercept network activity from worker 2', async function({ page, ser
expect(msg.text()).toBe('intercepted'); expect(msg.text()).toBe('intercepted');
}); });
it('should work with regular expression passed from a different context', async ({ page, server, isElectron }) => { it('should work with regular expression passed from a different context', async ({ page, server }) => {
it.skip(isElectron);
const ctx = vm.createContext(); const ctx = vm.createContext();
const regexp = vm.runInContext('new RegExp("empty\\.html")', ctx); const regexp = vm.runInContext('new RegExp("empty\\.html")', ctx);
let intercepted = false; let intercepted = false;

View file

@ -202,8 +202,9 @@ it('allInnerTexts should work', async ({ page }) => {
expect(await page.locator('div').allInnerTexts()).toEqual(['A', 'B', 'C']); expect(await page.locator('div').allInnerTexts()).toEqual(['A', 'B', 'C']);
}); });
it('isVisible and isHidden should work with details', async ({ page, isAndroid }) => { it('isVisible and isHidden should work with details', async ({ page, isAndroid, isElectron }) => {
it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/10674' }); it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/10674' });
it.skip(isElectron, 'We don\'t disable the AutoExpandDetailsElement feature on Electron');
it.skip(isAndroid, 'We can\'t disable the AutoExpandDetailsElement feature on Android'); it.skip(isAndroid, 'We can\'t disable the AutoExpandDetailsElement feature on Android');
await page.setContent(`<details> await page.setContent(`<details>
<summary>click to open</summary> <summary>click to open</summary>

View file

@ -23,8 +23,7 @@ it('clicking on links which do not commit navigation', async ({ page, server, ht
await page.click('a'); await page.click('a');
}); });
it('calling window.stop async', async ({ page, server, isElectron }) => { it('calling window.stop async', async ({ page, server }) => {
it.fixme(isElectron);
server.setRoute('/empty.html', async (req, res) => {}); server.setRoute('/empty.html', async (req, res) => {});
await page.evaluate(url => { await page.evaluate(url => {
window.location.href = url; window.location.href = url;

View file

@ -132,9 +132,7 @@ it('should fail with error upon disconnect', async ({ page, isAndroid }) => {
expect(error.message).toContain('Page closed'); expect(error.message).toContain('Page closed');
}); });
it('page.url should work', async ({ page, server, isElectron }) => { it('page.url should work', async ({ page, server }) => {
it.fixme(isElectron);
expect(page.url()).toBe('about:blank'); expect(page.url()).toBe('about:blank');
await page.goto(server.EMPTY_PAGE); await page.goto(server.EMPTY_PAGE);
expect(page.url()).toBe(server.EMPTY_PAGE); expect(page.url()).toBe(server.EMPTY_PAGE);

View file

@ -126,9 +126,8 @@ it('should emulate reduced motion', async ({ page }) => {
await page.emulateMedia({ reducedMotion: null }); await page.emulateMedia({ reducedMotion: null });
}); });
it('should emulate forcedColors ', async ({ page, browserName, isElectron }) => { it('should emulate forcedColors ', async ({ page, browserName }) => {
it.skip(browserName === 'webkit', 'https://bugs.webkit.org/show_bug.cgi?id=225281'); it.skip(browserName === 'webkit', 'https://bugs.webkit.org/show_bug.cgi?id=225281');
it.fixme(isElectron);
expect(await page.evaluate(() => matchMedia('(forced-colors: none)').matches)).toBe(true); expect(await page.evaluate(() => matchMedia('(forced-colors: none)').matches)).toBe(true);
await page.emulateMedia({ forcedColors: 'none' }); await page.emulateMedia({ forcedColors: 'none' });
expect(await page.evaluate(() => matchMedia('(forced-colors: none)').matches)).toBe(true); expect(await page.evaluate(() => matchMedia('(forced-colors: none)').matches)).toBe(true);

View file

@ -120,8 +120,7 @@ it('should handle object', async ({ page, browserName }) => {
expect(error.message).toBe(browserName === 'chromium' ? 'Object' : '[object Object]'); expect(error.message).toBe(browserName === 'chromium' ? 'Object' : '[object Object]');
}); });
it('should handle window', async ({ page, browserName, isElectron }) => { it('should handle window', async ({ page, browserName }) => {
it.skip(isElectron);
const [error] = await Promise.all([ const [error] = await Promise.all([
page.waitForEvent('pageerror'), page.waitForEvent('pageerror'),
page.evaluate(() => setTimeout(() => { throw window; }, 0)), page.evaluate(() => setTimeout(() => { throw window; }, 0)),

View file

@ -629,14 +629,13 @@ it('should properly wait for load', async ({ page, server, browserName }) => {
]); ]);
}); });
it('should properly report window.stop()', async ({ page, server, browserName }) => { it('should properly report window.stop()', async ({ page, server }) => {
server.setRoute('/module.js', async (req, res) => void 0); server.setRoute('/module.js', async (req, res) => void 0);
await page.goto(server.PREFIX + '/window-stop.html'); await page.goto(server.PREFIX + '/window-stop.html');
}); });
it('should return from goto if new navigation is started', async ({ page, server, browserName, isElectron, isAndroid }) => { it('should return from goto if new navigation is started', async ({ page, server, browserName, isAndroid }) => {
it.fixme(browserName === 'webkit', 'WebKit has a bug where Page.frameStoppedLoading is sent too early.'); it.fixme(browserName === 'webkit', 'WebKit has a bug where Page.frameStoppedLoading is sent too early.');
it.fixme(isElectron, 'Fails on Electron');
it.fail(isAndroid, 'Navigation gets aborted on Android'); it.fail(isAndroid, 'Navigation gets aborted on Android');
server.setRoute('/slow.js', async (req, res) => void 0); server.setRoute('/slow.js', async (req, res) => void 0);
let finished = false; let finished = false;

View file

@ -82,7 +82,7 @@ it('should return headers', async ({ page, server, browserName }) => {
}); });
it('should get the same headers as the server', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => { it('should get the same headers as the server', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => {
it.skip(isElectron && browserMajorVersion < 17, 'This needs Chromium >= 99'); it.skip(isElectron && browserMajorVersion < 99, 'This needs Chromium >= 99');
it.fail(browserName === 'webkit' && platform === 'win32', 'Curl does not show accept-encoding and accept-language'); it.fail(browserName === 'webkit' && platform === 'win32', 'Curl does not show accept-encoding and accept-language');
let serverRequest; let serverRequest;
server.setRoute('/empty.html', (request, response) => { server.setRoute('/empty.html', (request, response) => {
@ -95,7 +95,7 @@ it('should get the same headers as the server', async ({ page, server, browserNa
}); });
it('should not return allHeaders() until they are available', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => { it('should not return allHeaders() until they are available', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => {
it.skip(isElectron && browserMajorVersion < 17, 'This needs Chromium >= 99'); it.skip(isElectron && browserMajorVersion < 99, 'This needs Chromium >= 99');
it.fail(browserName === 'webkit' && platform === 'win32', 'Curl does not show accept-encoding and accept-language'); it.fail(browserName === 'webkit' && platform === 'win32', 'Curl does not show accept-encoding and accept-language');
let requestHeadersPromise; let requestHeadersPromise;
@ -120,7 +120,7 @@ it('should not return allHeaders() until they are available', async ({ page, ser
}); });
it('should get the same headers as the server CORS', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => { it('should get the same headers as the server CORS', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => {
it.skip(isElectron && browserMajorVersion < 17, 'This needs Chromium >= 99'); it.skip(isElectron && browserMajorVersion < 99, 'This needs Chromium >= 99');
it.fail(browserName === 'webkit' && platform === 'win32', 'Curl does not show accept-encoding and accept-language'); it.fail(browserName === 'webkit' && platform === 'win32', 'Curl does not show accept-encoding and accept-language');
await page.goto(server.PREFIX + '/empty.html'); await page.goto(server.PREFIX + '/empty.html');
@ -353,7 +353,7 @@ it('should return navigation bit when navigating to image', async ({ page, serve
}); });
it('should report raw headers', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => { it('should report raw headers', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => {
it.skip(isElectron && browserMajorVersion < 17, 'This needs Chromium >= 99'); it.skip(isElectron && browserMajorVersion < 99, 'This needs Chromium >= 99');
let expectedHeaders: { name: string, value: string }[]; let expectedHeaders: { name: string, value: string }[];
server.setRoute('/headers', (req, res) => { server.setRoute('/headers', (req, res) => {
@ -421,7 +421,7 @@ it('should report raw response headers in redirects', async ({ page, server, bro
}); });
it('should report all cookies in one header', async ({ page, server, isElectron, browserMajorVersion }) => { it('should report all cookies in one header', async ({ page, server, isElectron, browserMajorVersion }) => {
it.skip(isElectron && browserMajorVersion < 17, 'This needs Chromium >= 99'); it.skip(isElectron && browserMajorVersion < 99, 'This needs Chromium >= 99');
const expectedHeaders = {}; const expectedHeaders = {};
server.setRoute('/headers', (req, res) => { server.setRoute('/headers', (req, res) => {

View file

@ -180,7 +180,7 @@ it('should return status text', async ({ page, server }) => {
}); });
it('should report all headers', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => { it('should report all headers', async ({ page, server, browserName, platform, isElectron, browserMajorVersion }) => {
it.skip(isElectron && browserMajorVersion < 17, 'This needs Chromium >= 99'); it.skip(isElectron && browserMajorVersion < 99, 'This needs Chromium >= 99');
it.fixme(browserName === 'webkit' && platform === 'win32', 'libcurl does not support non-set-cookie multivalue headers'); it.fixme(browserName === 'webkit' && platform === 'win32', 'libcurl does not support non-set-cookie multivalue headers');
const expectedHeaders = { const expectedHeaders = {
@ -216,7 +216,7 @@ it('should report all headers', async ({ page, server, browserName, platform, is
}); });
it('should report multiple set-cookie headers', async ({ page, server, isElectron, browserMajorVersion }) => { it('should report multiple set-cookie headers', async ({ page, server, isElectron, browserMajorVersion }) => {
it.skip(isElectron && browserMajorVersion < 17, 'This needs Chromium >= 99'); it.skip(isElectron && browserMajorVersion < 99, 'This needs Chromium >= 99');
server.setRoute('/headers', (req, res) => { server.setRoute('/headers', (req, res) => {
res.writeHead(200, { res.writeHead(200, {

View file

@ -20,7 +20,7 @@ import zlib from 'zlib';
import { test as it, expect } from './pageTest'; import { test as it, expect } from './pageTest';
it.skip(({ isElectron, browserMajorVersion }) => isElectron && browserMajorVersion < 17, 'This needs Chromium >= 99'); it.skip(({ isElectron, browserMajorVersion }) => isElectron && browserMajorVersion < 99, 'This needs Chromium >= 99');
it('should set bodySize and headersSize', async ({ page, server }) => { it('should set bodySize and headersSize', async ({ page, server }) => {
await page.goto(server.EMPTY_PAGE); await page.goto(server.EMPTY_PAGE);

View file

@ -94,9 +94,8 @@ it('should not chain abort', async ({ page, server }) => {
expect(failed).toBeFalsy(); expect(failed).toBeFalsy();
}); });
it('should fall back after exception', async ({ page, server, isAndroid, isElectron }) => { it('should fall back after exception', async ({ page, server, isAndroid }) => {
it.fixme(isAndroid); it.fixme(isAndroid);
it.fixme(isElectron);
await page.route('**/empty.html', route => { await page.route('**/empty.html', route => {
route.continue(); route.continue();

View file

@ -99,10 +99,11 @@ it('should allow mocking binary responses', async ({ page, server, browserName,
expect(await img.screenshot()).toMatchSnapshot('mock-binary-response.png'); expect(await img.screenshot()).toMatchSnapshot('mock-binary-response.png');
}); });
it('should allow mocking svg with charset', async ({ page, server, browserName, headless, isAndroid, mode }) => { it('should allow mocking svg with charset', async ({ page, server, browserName, headless, isAndroid, isElectron, mode }) => {
it.skip(mode === 'service'); it.skip(mode === 'service');
it.skip(browserName === 'firefox' && !headless, 'Firefox headed produces a different image.'); it.skip(browserName === 'firefox' && !headless, 'Firefox headed produces a different image.');
it.skip(isAndroid); it.skip(isAndroid);
it.skip(isElectron, 'Protocol error (Storage.getCookies): Browser context management is not supported');
await page.route('**/*', route => { await page.route('**/*', route => {
route.fulfill({ route.fulfill({

View file

@ -57,9 +57,10 @@ it('should fulfill intercepted response', async ({ page, server, isElectron, isA
expect(await page.evaluate(() => document.body.textContent)).toBe('Yo, page!'); expect(await page.evaluate(() => document.body.textContent)).toBe('Yo, page!');
}); });
it('should fulfill response with empty body', async ({ page, server, isAndroid, browserName, browserMajorVersion }) => { it('should fulfill response with empty body', async ({ page, server, isAndroid, isElectron, browserName, browserMajorVersion }) => {
it.skip(browserName === 'chromium' && browserMajorVersion <= 91, 'Fails in Electron that uses old Chromium'); it.skip(browserName === 'chromium' && browserMajorVersion <= 91, 'Fails in Electron that uses old Chromium');
it.skip(isAndroid, 'The internal Android localhost (10.0.0.2) != the localhost on the host'); it.skip(isAndroid, 'The internal Android localhost (10.0.0.2) != the localhost on the host');
it.skip(isElectron, 'Protocol error (Storage.getCookies): Browser context management is not supported.');
await page.route('**/*', async route => { await page.route('**/*', async route => {
const response = await page.request.fetch(route.request()); const response = await page.request.fetch(route.request());
await route.fulfill({ await route.fulfill({

View file

@ -527,8 +527,8 @@ it('should emit event after navigation', async ({ page, server, browserName, bro
expect(logs).toEqual(['filechooser', 'filechooser']); expect(logs).toEqual(['filechooser', 'filechooser']);
}); });
it('should trigger listener added before navigation', async ({ page, server , browserMajorVersion, isElectron }) => { it('should trigger listener added before navigation', async ({ page, server, browserMajorVersion, isElectron }) => {
it.skip(isElectron && browserMajorVersion <= 17); it.skip(isElectron && browserMajorVersion <= 98);
// Add listener before cross process navigation. // Add listener before cross process navigation.
const chooserPromise = new Promise(f => page.once('filechooser', f)); const chooserPromise = new Promise(f => page.once('filechooser', f));
await page.goto(server.PREFIX + '/empty.html'); await page.goto(server.PREFIX + '/empty.html');

View file

@ -132,7 +132,7 @@ it('should work with clicking target=_blank', async ({ page, server }) => {
expect(await popup.evaluate(() => document.readyState)).toBe('complete'); expect(await popup.evaluate(() => document.readyState)).toBe('complete');
}); });
it('should wait for load state of newPage', async ({ page, server, isElectron }) => { it('should wait for load state of newPage', async ({ page, isElectron }) => {
it.fixme(isElectron, 'BrowserContext.newPage does not work in Electron'); it.fixme(isElectron, 'BrowserContext.newPage does not work in Electron');
const [newPage] = await Promise.all([ const [newPage] = await Promise.all([

View file

@ -27,10 +27,9 @@ it('should work for open shadow roots', async ({ page, server }) => {
expect(await page.$$(`data-testid:light=foo`)).toEqual([]); expect(await page.$$(`data-testid:light=foo`)).toEqual([]);
}); });
it('should click on links in shadow dom', async ({ page, server, browserName, browserMajorVersion, isElectron, isAndroid }) => { it('should click on links in shadow dom', async ({ page, server, browserName, browserMajorVersion, isAndroid }) => {
it.fixme(browserName === 'chromium' && browserMajorVersion < 91, 'Remove when crrev.com/864024 gets to the stable channel'); it.fixme(browserName === 'chromium' && browserMajorVersion < 91, 'Remove when crrev.com/864024 gets to the stable channel');
it.fixme(isAndroid); it.fixme(isAndroid);
it.fixme(isElectron);
await page.goto(server.PREFIX + '/shadow-dom-link.html'); await page.goto(server.PREFIX + '/shadow-dom-link.html');
expect(await page.evaluate(() => (window as any).clickCount)).toBe(0); expect(await page.evaluate(() => (window as any).clickCount)).toBe(0);

View file

@ -16,15 +16,14 @@
import type { Page } from 'playwright-core'; import type { Page } from 'playwright-core';
import { test as it, expect } from './pageTest'; import { test as it, expect } from './pageTest';
it.skip(({ isElectron, browserMajorVersion, isAndroid }) => { it.skip(({ isAndroid }) => {
// Old Electron has flaky wheel events. return isAndroid;
return (isElectron && browserMajorVersion <= 11) || isAndroid;
}); });
let ignoreDelta = false; let ignoreDelta = false;
it.beforeAll(async ({ browserMajorVersion, browserName, platform }) => { it.beforeAll(async ({ browserMajorVersion, browserName, isElectron, platform }) => {
if (browserName === 'chromium' && browserMajorVersion >= 102 && platform === 'darwin') { if (((browserName === 'chromium' && browserMajorVersion >= 102) || isElectron) && platform === 'darwin') {
// Chromium reports deltaX/deltaY scaled by host device scale factor. // Chromium reports deltaX/deltaY scaled by host device scale factor.
// https://bugs.chromium.org/p/chromium/issues/detail?id=1324819 // https://bugs.chromium.org/p/chromium/issues/detail?id=1324819
// https://github.com/microsoft/playwright/issues/7362 // https://github.com/microsoft/playwright/issues/7362