mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
test: make platform a parameter (#3910)
This commit is contained in:
parent
dc06f0a75c
commit
96629304ff
@ -74,7 +74,7 @@ it('should properly report httpOnly cookie', async ({context, page, server}) =>
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should properly report "Strict" sameSite cookie', (test, parameters) => {
|
it('should properly report "Strict" sameSite cookie', (test, parameters) => {
|
||||||
test.fail(options.WEBKIT(parameters) && WIN);
|
test.fail(options.WEBKIT(parameters) && options.WIN(parameters));
|
||||||
}, async ({context, page, server}) => {
|
}, async ({context, page, server}) => {
|
||||||
server.setRoute('/empty.html', (req, res) => {
|
server.setRoute('/empty.html', (req, res) => {
|
||||||
res.setHeader('Set-Cookie', 'name=value;SameSite=Strict');
|
res.setHeader('Set-Cookie', 'name=value;SameSite=Strict');
|
||||||
@ -87,7 +87,7 @@ it('should properly report "Strict" sameSite cookie', (test, parameters) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should properly report "Lax" sameSite cookie', (test, parameters) => {
|
it('should properly report "Lax" sameSite cookie', (test, parameters) => {
|
||||||
test.fail(options.WEBKIT(parameters) && WIN);
|
test.fail(options.WEBKIT(parameters) && options.WIN(parameters));
|
||||||
}, async ({context, page, server}) => {
|
}, async ({context, page, server}) => {
|
||||||
server.setRoute('/empty.html', (req, res) => {
|
server.setRoute('/empty.html', (req, res) => {
|
||||||
res.setHeader('Set-Cookie', 'name=value;SameSite=Lax');
|
res.setHeader('Set-Cookie', 'name=value;SameSite=Lax');
|
||||||
|
@ -175,14 +175,14 @@ it('should work with Shift-clicking', (test, parameters) => {
|
|||||||
it('should work with Ctrl-clicking', (test, parameters) => {
|
it('should work with Ctrl-clicking', (test, parameters) => {
|
||||||
test.fixme(options.WEBKIT(parameters), 'Ctrl+Click does not open a new tab.');
|
test.fixme(options.WEBKIT(parameters), 'Ctrl+Click does not open a new tab.');
|
||||||
test.fixme(options.FIREFOX(parameters), 'Reports an opener in this case.');
|
test.fixme(options.FIREFOX(parameters), 'Reports an opener in this case.');
|
||||||
}, async ({browser, server}) => {
|
}, async ({browser, server, isMac}) => {
|
||||||
const context = await browser.newContext();
|
const context = await browser.newContext();
|
||||||
const page = await context.newPage();
|
const page = await context.newPage();
|
||||||
await page.goto(server.EMPTY_PAGE);
|
await page.goto(server.EMPTY_PAGE);
|
||||||
await page.setContent('<a href="/one-style.html">yo</a>');
|
await page.setContent('<a href="/one-style.html">yo</a>');
|
||||||
const [popup] = await Promise.all([
|
const [popup] = await Promise.all([
|
||||||
context.waitForEvent('page'),
|
context.waitForEvent('page'),
|
||||||
page.click('a', { modifiers: [ MAC ? 'Meta' : 'Control'] }),
|
page.click('a', { modifiers: [ isMac ? 'Meta' : 'Control'] }),
|
||||||
]);
|
]);
|
||||||
expect(await popup.opener()).toBe(null);
|
expect(await popup.opener()).toBe(null);
|
||||||
await context.close();
|
await context.close();
|
||||||
|
@ -18,7 +18,7 @@ import url from 'url';
|
|||||||
import { it, expect, options } from './playwright.fixtures';
|
import { it, expect, options } from './playwright.fixtures';
|
||||||
|
|
||||||
it('Web Assembly should work', (test, parameters) => {
|
it('Web Assembly should work', (test, parameters) => {
|
||||||
test.fail(options.WEBKIT(parameters) && WIN);
|
test.fail(options.WEBKIT(parameters) && options.WIN(parameters));
|
||||||
}, async function({page, server}) {
|
}, async function({page, server}) {
|
||||||
await page.goto(server.PREFIX + '/wasm/table2.html');
|
await page.goto(server.PREFIX + '/wasm/table2.html');
|
||||||
expect(await page.evaluate('loadTable()')).toBe('42, 83');
|
expect(await page.evaluate('loadTable()')).toBe('42, 83');
|
||||||
@ -51,7 +51,7 @@ it('should respect CSP', async ({page, server}) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should play video', (test, parameters) => {
|
it('should play video', (test, parameters) => {
|
||||||
test.fixme(options.WEBKIT(parameters) && (WIN || LINUX));
|
test.fixme(options.WEBKIT(parameters) && (options.WIN(parameters) || options.LINUX(parameters)));
|
||||||
}, async ({page, asset, isWebKit}) => {
|
}, async ({page, asset, isWebKit}) => {
|
||||||
// TODO: the test passes on Windows locally but fails on GitHub Action bot,
|
// TODO: the test passes on Windows locally but fails on GitHub Action bot,
|
||||||
// apparently due to a Media Pack issue in the Windows Server.
|
// apparently due to a Media Pack issue in the Windows Server.
|
||||||
|
@ -39,7 +39,7 @@ it('should not throw with remote-debugging-port argument', (test, parameters) =>
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should open devtools when "devtools: true" option is given', (test, parameters) => {
|
it('should open devtools when "devtools: true" option is given', (test, parameters) => {
|
||||||
test.skip(!options.CHROMIUM(parameters) || options.WIRE || WIN);
|
test.skip(!options.CHROMIUM(parameters) || options.WIRE || options.WIN(parameters));
|
||||||
}, async ({browserType, defaultBrowserOptions}) => {
|
}, async ({browserType, defaultBrowserOptions}) => {
|
||||||
let devtoolsCallback;
|
let devtoolsCallback;
|
||||||
const devtoolsPromise = new Promise(f => devtoolsCallback = f);
|
const devtoolsPromise = new Promise(f => devtoolsCallback = f);
|
||||||
|
@ -69,7 +69,7 @@ it('should support ignoreHTTPSErrors option', async ({httpsServer, launchPersist
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should support extraHTTPHeaders option', (test, parameters) => {
|
it('should support extraHTTPHeaders option', (test, parameters) => {
|
||||||
test.flaky(options.FIREFOX(parameters) && !options.HEADLESS && LINUX, 'Intermittent timeout on bots');
|
test.flaky(options.FIREFOX(parameters) && !options.HEADLESS && options.LINUX(parameters), 'Intermittent timeout on bots');
|
||||||
}, async ({server, launchPersistent}) => {
|
}, async ({server, launchPersistent}) => {
|
||||||
const {page} = await launchPersistent({extraHTTPHeaders: { foo: 'bar' }});
|
const {page} = await launchPersistent({extraHTTPHeaders: { foo: 'bar' }});
|
||||||
const [request] = await Promise.all([
|
const [request] = await Promise.all([
|
||||||
|
@ -63,7 +63,7 @@ it('should dismiss the confirm prompt', async ({page}) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should be able to close context with open alert', (test, parameters) => {
|
it('should be able to close context with open alert', (test, parameters) => {
|
||||||
test.fixme(options.WEBKIT(parameters) && MAC);
|
test.fixme(options.WEBKIT(parameters) && options.MAC(parameters));
|
||||||
}, async ({browser}) => {
|
}, async ({browser}) => {
|
||||||
const context = await browser.newContext();
|
const context = await browser.newContext();
|
||||||
const page = await context.newPage();
|
const page = await context.newPage();
|
||||||
|
@ -35,7 +35,7 @@ it('should work for cross-process iframes', async ({ page, server }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should work for document', (test, parameters) => {
|
it('should work for document', (test, parameters) => {
|
||||||
test.flaky(WIN && options.WEBKIT(parameters));
|
test.flaky(options.WIN(parameters) && options.WEBKIT(parameters));
|
||||||
}, async ({ page, server }) => {
|
}, async ({ page, server }) => {
|
||||||
await page.goto(server.EMPTY_PAGE);
|
await page.goto(server.EMPTY_PAGE);
|
||||||
await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE);
|
await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE);
|
||||||
|
@ -363,7 +363,7 @@ describe('element screenshot', (suite, parameters) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should wait for element to stop moving', (test, parameters) => {
|
it('should wait for element to stop moving', (test, parameters) => {
|
||||||
test.flaky(options.WEBKIT(parameters) && !options.HEADLESS && LINUX);
|
test.flaky(options.WEBKIT(parameters) && !options.HEADLESS && options.LINUX(parameters));
|
||||||
}, async ({ page, server, golden }) => {
|
}, async ({ page, server, golden }) => {
|
||||||
await page.setViewportSize({ width: 500, height: 500 });
|
await page.setViewportSize({ width: 500, height: 500 });
|
||||||
await page.goto(server.PREFIX + '/grid.html');
|
await page.goto(server.PREFIX + '/grid.html');
|
||||||
|
@ -115,7 +115,7 @@ it('should wait for disabled button', async ({page}) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should wait for stable position', (test, parameters) => {
|
it('should wait for stable position', (test, parameters) => {
|
||||||
test.fixme(options.FIREFOX(parameters) && LINUX);
|
test.fixme(options.FIREFOX(parameters) && options.LINUX(parameters));
|
||||||
}, async ({page, server}) => {
|
}, async ({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/button.html');
|
await page.goto(server.PREFIX + '/input/button.html');
|
||||||
const button = await page.$('button');
|
const button = await page.$('button');
|
||||||
|
@ -45,20 +45,20 @@ defineTestFixture('stallingConnectedRemoteServer', async ({browserType, stalling
|
|||||||
await browser.close();
|
await browser.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should close the browser when the node process closes', (test, parameters) => {
|
it('should close the browser when the node process closes', test => {
|
||||||
test.slow();
|
test.slow();
|
||||||
}, async ({connectedRemoteServer}) => {
|
}, async ({connectedRemoteServer, isWindows}) => {
|
||||||
if (WIN)
|
if (isWindows)
|
||||||
execSync(`taskkill /pid ${connectedRemoteServer.child().pid} /T /F`);
|
execSync(`taskkill /pid ${connectedRemoteServer.child().pid} /T /F`);
|
||||||
else
|
else
|
||||||
process.kill(connectedRemoteServer.child().pid);
|
process.kill(connectedRemoteServer.child().pid);
|
||||||
expect(await connectedRemoteServer.childExitCode()).toBe(WIN ? 1 : 0);
|
expect(await connectedRemoteServer.childExitCode()).toBe(isWindows ? 1 : 0);
|
||||||
// We might not get browser exitCode in time when killing the parent node process,
|
// We might not get browser exitCode in time when killing the parent node process,
|
||||||
// so we don't check it here.
|
// so we don't check it here.
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('fixtures', suite => {
|
describe('fixtures', (suite, parameters) => {
|
||||||
suite.skip(WIN || !options.HEADLESS);
|
suite.skip(options.WIN(parameters) || !options.HEADLESS);
|
||||||
suite.slow();
|
suite.slow();
|
||||||
}, () => {
|
}, () => {
|
||||||
// Cannot reliably send signals on Windows.
|
// Cannot reliably send signals on Windows.
|
||||||
|
@ -79,7 +79,7 @@ it('should traverse focus in all directions', async function({page}) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should traverse only form elements', (test, parameters) => {
|
it('should traverse only form elements', (test, parameters) => {
|
||||||
test.skip(!MAC || !options.WEBKIT(parameters),
|
test.skip(!options.MAC(parameters) || !options.WEBKIT(parameters),
|
||||||
'Chromium and WebKit both have settings for tab traversing all links, but it is only on by default in WebKit.');
|
'Chromium and WebKit both have settings for tab traversing all links, but it is only on by default in WebKit.');
|
||||||
}, async function({page}) {
|
}, async function({page}) {
|
||||||
await page.setContent(`
|
await page.setContent(`
|
||||||
|
@ -27,7 +27,7 @@ it('should have default url when launching browser', async ({browserType, defaul
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('headless should be able to read cookies written by headful', (test, parameters) => {
|
it('headless should be able to read cookies written by headful', (test, parameters) => {
|
||||||
test.fail(WIN && options.CHROMIUM(parameters));
|
test.fail(options.WIN(parameters) && options.CHROMIUM(parameters));
|
||||||
test.flaky(options.FIREFOX(parameters));
|
test.flaky(options.FIREFOX(parameters));
|
||||||
test.slow();
|
test.slow();
|
||||||
}, async ({browserType, defaultBrowserOptions, server}) => {
|
}, async ({browserType, defaultBrowserOptions, server}) => {
|
||||||
|
@ -84,7 +84,7 @@ it('insertText should only emit input event', async ({page, server}) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should report shiftKey', (test, parameters) => {
|
it('should report shiftKey', (test, parameters) => {
|
||||||
test.fail(options.FIREFOX(parameters) && MAC);
|
test.fail(options.FIREFOX(parameters) && options.MAC(parameters));
|
||||||
}, async ({page, server}) => {
|
}, async ({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/keyboard.html');
|
await page.goto(server.PREFIX + '/input/keyboard.html');
|
||||||
const keyboard = page.keyboard;
|
const keyboard = page.keyboard;
|
||||||
@ -312,11 +312,11 @@ it('should type emoji into an iframe', async ({page, server}) => {
|
|||||||
expect(await frame.$eval('textarea', textarea => textarea.value)).toBe('👹 Tokyo street Japan 🇯🇵');
|
expect(await frame.$eval('textarea', textarea => textarea.value)).toBe('👹 Tokyo street Japan 🇯🇵');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle selectAll', async ({page, server}) => {
|
it('should handle selectAll', async ({page, server, isMac}) => {
|
||||||
await page.goto(server.PREFIX + '/input/textarea.html');
|
await page.goto(server.PREFIX + '/input/textarea.html');
|
||||||
const textarea = await page.$('textarea');
|
const textarea = await page.$('textarea');
|
||||||
await textarea.type('some text');
|
await textarea.type('some text');
|
||||||
const modifier = MAC ? 'Meta' : 'Control';
|
const modifier = isMac ? 'Meta' : 'Control';
|
||||||
await page.keyboard.down(modifier);
|
await page.keyboard.down(modifier);
|
||||||
await page.keyboard.press('a');
|
await page.keyboard.press('a');
|
||||||
await page.keyboard.up(modifier);
|
await page.keyboard.up(modifier);
|
||||||
@ -324,7 +324,7 @@ it('should handle selectAll', async ({page, server}) => {
|
|||||||
expect(await page.$eval('textarea', textarea => textarea.value)).toBe('');
|
expect(await page.$eval('textarea', textarea => textarea.value)).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be able to prevent selectAll', async ({page, server}) => {
|
it('should be able to prevent selectAll', async ({page, server, isMac}) => {
|
||||||
await page.goto(server.PREFIX + '/input/textarea.html');
|
await page.goto(server.PREFIX + '/input/textarea.html');
|
||||||
const textarea = await page.$('textarea');
|
const textarea = await page.$('textarea');
|
||||||
await textarea.type('some text');
|
await textarea.type('some text');
|
||||||
@ -334,7 +334,7 @@ it('should be able to prevent selectAll', async ({page, server}) => {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}, false);
|
}, false);
|
||||||
});
|
});
|
||||||
const modifier = MAC ? 'Meta' : 'Control';
|
const modifier = isMac ? 'Meta' : 'Control';
|
||||||
await page.keyboard.down(modifier);
|
await page.keyboard.down(modifier);
|
||||||
await page.keyboard.press('a');
|
await page.keyboard.press('a');
|
||||||
await page.keyboard.up(modifier);
|
await page.keyboard.up(modifier);
|
||||||
@ -343,7 +343,7 @@ it('should be able to prevent selectAll', async ({page, server}) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should support MacOS shortcuts', (test, parameters) => {
|
it('should support MacOS shortcuts', (test, parameters) => {
|
||||||
test.skip(!MAC);
|
test.skip(!options.MAC(parameters));
|
||||||
}, async ({page, server}) => {
|
}, async ({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/textarea.html');
|
await page.goto(server.PREFIX + '/input/textarea.html');
|
||||||
const textarea = await page.$('textarea');
|
const textarea = await page.$('textarea');
|
||||||
@ -354,11 +354,11 @@ it('should support MacOS shortcuts', (test, parameters) => {
|
|||||||
expect(await page.$eval('textarea', textarea => textarea.value)).toBe('some ');
|
expect(await page.$eval('textarea', textarea => textarea.value)).toBe('some ');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should press the meta key', async ({page, isFirefox}) => {
|
it('should press the meta key', async ({page, isFirefox, isMac}) => {
|
||||||
const lastEvent = await captureLastKeydown(page);
|
const lastEvent = await captureLastKeydown(page);
|
||||||
await page.keyboard.press('Meta');
|
await page.keyboard.press('Meta');
|
||||||
const {key, code, metaKey} = await lastEvent.jsonValue();
|
const {key, code, metaKey} = await lastEvent.jsonValue();
|
||||||
if (isFirefox && !MAC)
|
if (isFirefox && !isMac)
|
||||||
expect(key).toBe('OS');
|
expect(key).toBe('OS');
|
||||||
else
|
else
|
||||||
expect(key).toBe('Meta');
|
expect(key).toBe('Meta');
|
||||||
@ -368,7 +368,7 @@ it('should press the meta key', async ({page, isFirefox}) => {
|
|||||||
else
|
else
|
||||||
expect(code).toBe('MetaLeft');
|
expect(code).toBe('MetaLeft');
|
||||||
|
|
||||||
if (isFirefox && !MAC)
|
if (isFirefox && !isMac)
|
||||||
expect(metaKey).toBe(false);
|
expect(metaKey).toBe(false);
|
||||||
else
|
else
|
||||||
expect(metaKey).toBe(true);
|
expect(metaKey).toBe(true);
|
||||||
|
@ -28,7 +28,7 @@ function dimensions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
it('should click the document', (test, parameters) => {
|
it('should click the document', (test, parameters) => {
|
||||||
test.flaky(options.FIREFOX(parameters) && WIN, 'Occasionally times out on options.FIREFOX on Windows: https://github.com/microsoft/playwright/pull/1911/checks?check_run_id=607149016');
|
test.flaky(options.FIREFOX(parameters) && options.WIN(parameters), 'Occasionally times out on options.FIREFOX on Windows: https://github.com/microsoft/playwright/pull/1911/checks?check_run_id=607149016');
|
||||||
}, async ({page, server}) => {
|
}, async ({page, server}) => {
|
||||||
await page.evaluate(() => {
|
await page.evaluate(() => {
|
||||||
window['clickPromise'] = new Promise(resolve => {
|
window['clickPromise'] = new Promise(resolve => {
|
||||||
@ -123,12 +123,12 @@ it('should trigger hover state with removed window.Node', async ({page, server})
|
|||||||
expect(await page.evaluate(() => document.querySelector('button:hover').id)).toBe('button-6');
|
expect(await page.evaluate(() => document.querySelector('button:hover').id)).toBe('button-6');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should set modifier keys on click', async ({page, server, isFirefox}) => {
|
it('should set modifier keys on click', async ({page, server, isFirefox, isMac}) => {
|
||||||
await page.goto(server.PREFIX + '/input/scrollable.html');
|
await page.goto(server.PREFIX + '/input/scrollable.html');
|
||||||
await page.evaluate(() => document.querySelector('#button-3').addEventListener('mousedown', e => window['lastEvent'] = e, true));
|
await page.evaluate(() => document.querySelector('#button-3').addEventListener('mousedown', e => window['lastEvent'] = e, true));
|
||||||
const modifiers = {'Shift': 'shiftKey', 'Control': 'ctrlKey', 'Alt': 'altKey', 'Meta': 'metaKey'};
|
const modifiers = {'Shift': 'shiftKey', 'Control': 'ctrlKey', 'Alt': 'altKey', 'Meta': 'metaKey'};
|
||||||
// In Firefox, the Meta modifier only exists on Mac
|
// In Firefox, the Meta modifier only exists on Mac
|
||||||
if (isFirefox && !MAC)
|
if (isFirefox && !isMac)
|
||||||
delete modifiers['Meta'];
|
delete modifiers['Meta'];
|
||||||
for (const modifier in modifiers) {
|
for (const modifier in modifiers) {
|
||||||
await page.keyboard.down(modifier);
|
await page.keyboard.down(modifier);
|
||||||
|
@ -56,7 +56,7 @@ it('should return headers', async ({page, server, isChromium, isFirefox, isWebKi
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should get the same headers as the server', (test, parameters) => {
|
it('should get the same headers as the server', (test, parameters) => {
|
||||||
test.fail(options.CHROMIUM(parameters) || options.WEBKIT(parameters));
|
test.fail(options.CHROMIUM(parameters) || options.WEBKIT(parameters), 'Provisional headers differ from those in network stack');
|
||||||
}, async ({page, server}) => {
|
}, async ({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/empty.html');
|
await page.goto(server.PREFIX + '/empty.html');
|
||||||
let serverRequest;
|
let serverRequest;
|
||||||
|
@ -28,7 +28,7 @@ function crash(page, toImpl, browserName) {
|
|||||||
|
|
||||||
describe('', (suite, parameters) => {
|
describe('', (suite, parameters) => {
|
||||||
suite.fixme(options.WIRE);
|
suite.fixme(options.WIRE);
|
||||||
suite.flaky(options.FIREFOX(parameters) && WIN);
|
suite.flaky(options.FIREFOX(parameters) && options.WIN(parameters));
|
||||||
}, () => {
|
}, () => {
|
||||||
it('should emit crash event when page crashes', async ({page, browserName, toImpl}) => {
|
it('should emit crash event when page crashes', async ({page, browserName, toImpl}) => {
|
||||||
await page.setContent(`<div>This page should crash</div>`);
|
await page.setContent(`<div>This page should crash</div>`);
|
||||||
@ -65,7 +65,7 @@ describe('', (suite, parameters) => {
|
|||||||
|
|
||||||
it('should be able to close context when page crashes', (test, parameters) => {
|
it('should be able to close context when page crashes', (test, parameters) => {
|
||||||
test.fixme(options.WIRE);
|
test.fixme(options.WIRE);
|
||||||
test.flaky(options.FIREFOX(parameters) && WIN);
|
test.flaky(options.FIREFOX(parameters) && options.WIN(parameters));
|
||||||
}, async ({page, browserName, toImpl}) => {
|
}, async ({page, browserName, toImpl}) => {
|
||||||
await page.setContent(`<div>This page should crash</div>`);
|
await page.setContent(`<div>This page should crash</div>`);
|
||||||
crash(page, toImpl, browserName);
|
crash(page, toImpl, browserName);
|
||||||
|
@ -41,7 +41,7 @@ it('Page.Events.Response', async ({page, server}) => {
|
|||||||
expect(responses[0].request()).toBeTruthy();
|
expect(responses[0].request()).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Page.Events.RequestFailed', async ({page, server, isChromium, isWebKit}) => {
|
it('Page.Events.RequestFailed', async ({page, server, isChromium, isWebKit, isMac, isWindows}) => {
|
||||||
server.setRoute('/one-style.css', (req, res) => {
|
server.setRoute('/one-style.css', (req, res) => {
|
||||||
res.setHeader('Content-Type', 'text/css');
|
res.setHeader('Content-Type', 'text/css');
|
||||||
res.connection.destroy();
|
res.connection.destroy();
|
||||||
@ -56,9 +56,9 @@ it('Page.Events.RequestFailed', async ({page, server, isChromium, isWebKit}) =>
|
|||||||
if (isChromium) {
|
if (isChromium) {
|
||||||
expect(failedRequests[0].failure().errorText).toBe('net::ERR_EMPTY_RESPONSE');
|
expect(failedRequests[0].failure().errorText).toBe('net::ERR_EMPTY_RESPONSE');
|
||||||
} else if (isWebKit) {
|
} else if (isWebKit) {
|
||||||
if (MAC)
|
if (isMac)
|
||||||
expect(failedRequests[0].failure().errorText).toBe('The network connection was lost.');
|
expect(failedRequests[0].failure().errorText).toBe('The network connection was lost.');
|
||||||
else if (WIN)
|
else if (isWindows)
|
||||||
expect(failedRequests[0].failure().errorText).toBe('Server returned nothing (no headers, no data)');
|
expect(failedRequests[0].failure().errorText).toBe('Server returned nothing (no headers, no data)');
|
||||||
else
|
else
|
||||||
expect(failedRequests[0].failure().errorText).toBe('Message Corrupt');
|
expect(failedRequests[0].failure().errorText).toBe('Message Corrupt');
|
||||||
|
@ -210,12 +210,12 @@ it('should throw if networkidle2 is passed as an option', async ({page, server})
|
|||||||
expect(error.message).toContain(`waitUntil: expected one of (load|domcontentloaded|networkidle)`);
|
expect(error.message).toContain(`waitUntil: expected one of (load|domcontentloaded|networkidle)`);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should fail when main resources failed to load', async ({page, isChromium, isWebKit}) => {
|
it('should fail when main resources failed to load', async ({page, isChromium, isWebKit, isWindows}) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
await page.goto('http://localhost:44123/non-existing-url').catch(e => error = e);
|
await page.goto('http://localhost:44123/non-existing-url').catch(e => error = e);
|
||||||
if (isChromium)
|
if (isChromium)
|
||||||
expect(error.message).toContain('net::ERR_CONNECTION_REFUSED');
|
expect(error.message).toContain('net::ERR_CONNECTION_REFUSED');
|
||||||
else if (isWebKit && WIN)
|
else if (isWebKit && isWindows)
|
||||||
expect(error.message).toContain(`Couldn\'t connect to server`);
|
expect(error.message).toContain(`Couldn\'t connect to server`);
|
||||||
else if (isWebKit)
|
else if (isWebKit)
|
||||||
expect(error.message).toContain('Could not connect');
|
expect(error.message).toContain('Could not connect');
|
||||||
|
@ -53,7 +53,7 @@ it('page.goBack should work with HistoryAPI', async ({page, server}) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('page.goBack should work for file urls', (test, parameters) => {
|
it('page.goBack should work for file urls', (test, parameters) => {
|
||||||
test.fail(options.WEBKIT(parameters) && MAC);
|
test.fail(options.WEBKIT(parameters) && options.MAC(parameters));
|
||||||
}, async ({page, server, asset}) => {
|
}, async ({page, server, asset}) => {
|
||||||
// WebKit embedder fails to go back/forward to the file url.
|
// WebKit embedder fails to go back/forward to the file url.
|
||||||
const url1 = url.pathToFileURL(asset('empty.html')).href;
|
const url1 = url.pathToFileURL(asset('empty.html')).href;
|
||||||
|
@ -219,7 +219,7 @@ describe('page screenshot', (suite, parameters) => {
|
|||||||
|
|
||||||
it('should work for webgl', (test, parameters) => {
|
it('should work for webgl', (test, parameters) => {
|
||||||
test.fixme(options.FIREFOX(parameters));
|
test.fixme(options.FIREFOX(parameters));
|
||||||
test.fixme(options.WEBKIT(parameters) && LINUX);
|
test.fixme(options.WEBKIT(parameters) && options.LINUX(parameters));
|
||||||
}, async ({page, server, golden}) => {
|
}, async ({page, server, golden}) => {
|
||||||
await page.setViewportSize({width: 640, height: 480});
|
await page.setViewportSize({width: 640, height: 480});
|
||||||
await page.goto(server.PREFIX + '/screenshots/webgl.html');
|
await page.goto(server.PREFIX + '/screenshots/webgl.html');
|
||||||
|
@ -104,7 +104,7 @@ describe('permissions', (suite, parameters) => {
|
|||||||
it('should trigger permission onchange', (test, parameters) => {
|
it('should trigger permission onchange', (test, parameters) => {
|
||||||
test.fail(options.WEBKIT(parameters));
|
test.fail(options.WEBKIT(parameters));
|
||||||
test.fail(options.CHROMIUM(parameters) && !options.HEADLESS);
|
test.fail(options.CHROMIUM(parameters) && !options.HEADLESS);
|
||||||
test.flaky(options.FIREFOX(parameters) && LINUX);
|
test.flaky(options.FIREFOX(parameters) && options.LINUX(parameters));
|
||||||
}, async ({page, server, context}) => {
|
}, async ({page, server, context}) => {
|
||||||
// TODO: flaky
|
// TODO: flaky
|
||||||
// - Linux: https://github.com/microsoft/playwright/pull/1790/checks?check_run_id=587327883
|
// - Linux: https://github.com/microsoft/playwright/pull/1790/checks?check_run_id=587327883
|
||||||
|
@ -25,8 +25,10 @@ import { Transport } from '../lib/protocol/transport';
|
|||||||
import { installCoverageHooks } from './coverage';
|
import { installCoverageHooks } from './coverage';
|
||||||
import { mkdtempAsync, removeFolderAsync } from './utils';
|
import { mkdtempAsync, removeFolderAsync } from './utils';
|
||||||
import { fixtures as baseFixtures } from '@playwright/test-runner';
|
import { fixtures as baseFixtures } from '@playwright/test-runner';
|
||||||
|
import assert from 'assert';
|
||||||
|
|
||||||
type PlaywrightParameters = {
|
type PlaywrightParameters = {
|
||||||
|
platform: 'win32' | 'linux' | 'darwin'
|
||||||
browserName: string;
|
browserName: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -43,6 +45,9 @@ type PlaywrightWorkerFixtures = {
|
|||||||
isChromium: boolean;
|
isChromium: boolean;
|
||||||
isFirefox: boolean;
|
isFirefox: boolean;
|
||||||
isWebKit: boolean;
|
isWebKit: boolean;
|
||||||
|
isWindows: boolean;
|
||||||
|
isMac: boolean;
|
||||||
|
isLinux: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
type PlaywrightFixtures = {
|
type PlaywrightFixtures = {
|
||||||
@ -74,9 +79,12 @@ export const afterAll = fixtures.afterAll;
|
|||||||
export const expect = fixtures.expect;
|
export const expect = fixtures.expect;
|
||||||
|
|
||||||
export const options = {
|
export const options = {
|
||||||
CHROMIUM: parameters => parameters.browserName === 'chromium',
|
CHROMIUM: (parameters: PlaywrightParameters) => parameters.browserName === 'chromium',
|
||||||
FIREFOX: parameters => parameters.browserName === 'firefox',
|
FIREFOX: (parameters: PlaywrightParameters) => parameters.browserName === 'firefox',
|
||||||
WEBKIT: parameters => parameters.browserName === 'webkit',
|
WEBKIT: (parameters: PlaywrightParameters) => parameters.browserName === 'webkit',
|
||||||
|
MAC: (parameters: PlaywrightParameters) => parameters.platform === 'darwin',
|
||||||
|
LINUX: (parameters: PlaywrightParameters) => parameters.platform === 'linux',
|
||||||
|
WIN: (parameters: PlaywrightParameters) => parameters.platform === 'win32',
|
||||||
HEADLESS: !!valueFromEnv('HEADLESS', true),
|
HEADLESS: !!valueFromEnv('HEADLESS', true),
|
||||||
WIRE: !!process.env.PWWIRE,
|
WIRE: !!process.env.PWWIRE,
|
||||||
SLOW_MO: valueFromEnv('SLOW_MO', 0),
|
SLOW_MO: valueFromEnv('SLOW_MO', 0),
|
||||||
@ -84,16 +92,6 @@ export const options = {
|
|||||||
TRACING: valueFromEnv('TRACING', false) && !process.env.PWWIRE,
|
TRACING: valueFromEnv('TRACING', false) && !process.env.PWWIRE,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare global {
|
|
||||||
const MAC: boolean;
|
|
||||||
const LINUX: boolean;
|
|
||||||
const WIN: boolean;
|
|
||||||
}
|
|
||||||
const platform = os.platform();
|
|
||||||
global['MAC'] = platform === 'darwin';
|
|
||||||
global['LINUX'] = platform === 'linux';
|
|
||||||
global['WIN'] = platform === 'win32';
|
|
||||||
|
|
||||||
defineWorkerFixture('httpService', async ({parallelIndex}, test) => {
|
defineWorkerFixture('httpService', async ({parallelIndex}, test) => {
|
||||||
const assetsPath = path.join(__dirname, 'assets');
|
const assetsPath = path.join(__dirname, 'assets');
|
||||||
const cachedPath = path.join(__dirname, 'assets', 'cached');
|
const cachedPath = path.join(__dirname, 'assets', 'cached');
|
||||||
@ -136,7 +134,8 @@ defineWorkerFixture('defaultBrowserOptions', async ({browserName}, test) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
defineWorkerFixture('playwright', async ({browserName, parallelIndex}, test) => {
|
defineWorkerFixture('playwright', async ({browserName, parallelIndex, platform}, test) => {
|
||||||
|
assert(platform); // Depend on platform to generate all tests.
|
||||||
const {coverage, uninstall} = installCoverageHooks(browserName);
|
const {coverage, uninstall} = installCoverageHooks(browserName);
|
||||||
if (options.WIRE) {
|
if (options.WIRE) {
|
||||||
require('../lib/utils/utils').setUnderTest();
|
require('../lib/utils/utils').setUnderTest();
|
||||||
@ -192,10 +191,15 @@ defineWorkerFixture('browserType', async ({playwright, browserName}, test) => {
|
|||||||
|
|
||||||
defineParameter('browserName', 'Browser type name', '');
|
defineParameter('browserName', 'Browser type name', '');
|
||||||
|
|
||||||
|
defineParameter('platform', 'Operating system', process.platform as ('win32' | 'linux' | 'darwin'));
|
||||||
|
|
||||||
generateParametrizedTests(
|
generateParametrizedTests(
|
||||||
'browserName',
|
'browserName',
|
||||||
process.env.BROWSER ? [process.env.BROWSER] : ['chromium', 'webkit', 'firefox']);
|
process.env.BROWSER ? [process.env.BROWSER] : ['chromium', 'webkit', 'firefox']);
|
||||||
|
|
||||||
|
generateParametrizedTests(
|
||||||
|
'platform',
|
||||||
|
process.env.PWTESTREPORT ? ['win32', 'darwin', 'linux'] : [process.platform as ('win32' | 'linux' | 'darwin')]);
|
||||||
|
|
||||||
defineWorkerFixture('isChromium', async ({browserName}, test) => {
|
defineWorkerFixture('isChromium', async ({browserName}, test) => {
|
||||||
await test(browserName === 'chromium');
|
await test(browserName === 'chromium');
|
||||||
@ -209,6 +213,18 @@ defineWorkerFixture('isWebKit', async ({browserName}, test) => {
|
|||||||
await test(browserName === 'webkit');
|
await test(browserName === 'webkit');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
defineWorkerFixture('isWindows', async ({platform}, test) => {
|
||||||
|
await test(platform === 'win32');
|
||||||
|
});
|
||||||
|
|
||||||
|
defineWorkerFixture('isMac', async ({platform}, test) => {
|
||||||
|
await test(platform === 'darwin');
|
||||||
|
});
|
||||||
|
|
||||||
|
defineWorkerFixture('isLinux', async ({platform}, test) => {
|
||||||
|
await test(platform === 'linux');
|
||||||
|
});
|
||||||
|
|
||||||
defineWorkerFixture('browser', async ({browserType, defaultBrowserOptions}, test) => {
|
defineWorkerFixture('browser', async ({browserType, defaultBrowserOptions}, test) => {
|
||||||
const browser = await browserType.launch(defaultBrowserOptions);
|
const browser = await browserType.launch(defaultBrowserOptions);
|
||||||
await test(browser);
|
await test(browser);
|
||||||
|
@ -120,7 +120,7 @@ it('should exclude patterns', (test, parameters) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should use socks proxy', (test, parameters) => {
|
it('should use socks proxy', (test, parameters) => {
|
||||||
test.flaky(MAC && options.WEBKIT(parameters), 'Intermittent page.goto: The network connection was lost error on bots');
|
test.flaky(options.MAC(parameters) && options.WEBKIT(parameters), 'Intermittent page.goto: The network connection was lost error on bots');
|
||||||
}, async ({ browserType, defaultBrowserOptions, parallelIndex }) => {
|
}, async ({ browserType, defaultBrowserOptions, parallelIndex }) => {
|
||||||
const server = socks.createServer((info, accept, deny) => {
|
const server = socks.createServer((info, accept, deny) => {
|
||||||
let socket;
|
let socket;
|
||||||
|
@ -249,7 +249,7 @@ describe('screencast', suite => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should capture css transformation', (test, parameters) => {
|
it('should capture css transformation', (test, parameters) => {
|
||||||
test.fail(options.WEBKIT(parameters) && WIN, 'Does not work on WebKit Windows');
|
test.fail(options.WEBKIT(parameters) && options.WIN(parameters), 'Does not work on WebKit Windows');
|
||||||
}, async ({browser, server, videoPlayer, videoFile}) => {
|
}, async ({browser, server, videoPlayer, videoFile}) => {
|
||||||
const size = {width: 320, height: 240};
|
const size = {width: 320, height: 240};
|
||||||
// Set viewport equal to screencast frame size to avoid scaling.
|
// Set viewport equal to screencast frame size to avoid scaling.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user