chore: roll Electron to 16.2.8 (#16017)
This commit is contained in:
parent
abf951ebec
commit
6482ff7a7f
33
package-lock.json
generated
33
package-lock.json
generated
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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' }],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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'),
|
||||||
|
|
|
||||||
|
|
@ -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'),
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
|
|
|
||||||
|
|
@ -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(() => {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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)),
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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) => {
|
||||||
|
|
|
||||||
|
|
@ -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, {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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({
|
||||||
|
|
|
||||||
|
|
@ -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({
|
||||||
|
|
|
||||||
|
|
@ -528,7 +528,7 @@ it('should emit event after navigation', async ({ page, server, browserName, bro
|
||||||
});
|
});
|
||||||
|
|
||||||
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');
|
||||||
|
|
|
||||||
|
|
@ -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([
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue