diff --git a/README.md b/README.md index ab0becc2e4..4674498edf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🎭 Playwright -[![npm version](https://img.shields.io/npm/v/playwright.svg?style=flat)](https://www.npmjs.com/package/playwright) [![Join Slack](https://img.shields.io/badge/join-slack-infomational)](https://join.slack.com/t/playwright/shared_invite/enQtOTEyMTUxMzgxMjIwLThjMDUxZmIyNTRiMTJjNjIyMzdmZDA3MTQxZWUwZTFjZjQwNGYxZGM5MzRmNzZlMWI5ZWUyOTkzMjE5Njg1NDg) [![Chromium version](https://img.shields.io/badge/chromium-86.0.4217.0-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-78.0b5-blue.svg?logo=mozilla-firefox)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-14.0-blue.svg?logo=safari)](https://webkit.org/) +[![npm version](https://img.shields.io/npm/v/playwright.svg?style=flat)](https://www.npmjs.com/package/playwright) [![Join Slack](https://img.shields.io/badge/join-slack-infomational)](https://join.slack.com/t/playwright/shared_invite/enQtOTEyMTUxMzgxMjIwLThjMDUxZmIyNTRiMTJjNjIyMzdmZDA3MTQxZWUwZTFjZjQwNGYxZGM5MzRmNzZlMWI5ZWUyOTkzMjE5Njg1NDg) [![Chromium version](https://img.shields.io/badge/chromium-86.0.4217.0-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-79.0a1-blue.svg?logo=mozilla-firefox)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-14.0-blue.svg?logo=safari)](https://webkit.org/) ## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/#?path=docs/api.md) @@ -10,7 +10,7 @@ Playwright is a Node.js library to automate [Chromium](https://www.chromium.org/ | :--- | :---: | :---: | :---: | | Chromium 86.0.4217.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: | | WebKit 14.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| Firefox 78.0b5 | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Firefox 79.0a1 | :white_check_mark: | :white_check_mark: | :white_check_mark: | Headless execution is supported for all the browsers on all platforms. Check out [system requirements](https://playwright.dev/#?path=docs/intro.md&q=system-requirements) for details. diff --git a/browsers.json b/browsers.json index c76cfeda6e..fa34a5209d 100644 --- a/browsers.json +++ b/browsers.json @@ -8,7 +8,7 @@ }, { "name": "firefox", - "revision": "1152", + "revision": "1154", "download": true }, { diff --git a/test/browser.spec.ts b/test/browser.spec.ts index 2ebe07eba7..ffc831919f 100644 --- a/test/browser.spec.ts +++ b/test/browser.spec.ts @@ -44,5 +44,5 @@ it('version should work', async function({browser}) { if (CHROMIUM) expect(version.match(/^\d+\.\d+\.\d+\.\d+$/)).toBeTruthy(); else - expect(version.match(/^\d+\.\d+$/)).toBeTruthy(); + expect(version.match(/^\d+\.\d+/)).toBeTruthy(); }); diff --git a/test/browsercontext-add-cookies.spec.ts b/test/browsercontext-add-cookies.spec.ts index b8ff9755f1..4a3d7cbabb 100644 --- a/test/browsercontext-add-cookies.spec.ts +++ b/test/browsercontext-add-cookies.spec.ts @@ -327,7 +327,7 @@ it('should(not) block third party cookies', async({context, page, server}) => { }, server.CROSS_PROCESS_PREFIX + '/grid.html'); await page.frames()[1].evaluate(`document.cookie = 'username=John Doe'`); await page.waitForTimeout(2000); - const allowsThirdParty = CHROMIUM || FFOX; + const allowsThirdParty = CHROMIUM; const cookies = await context.cookies(server.CROSS_PROCESS_PREFIX + '/grid.html'); if (allowsThirdParty) { expect(cookies).toEqual([ diff --git a/test/browsercontext-cookies.spec.ts b/test/browsercontext-cookies.spec.ts index 3f1598c173..4da9fdc47d 100644 --- a/test/browsercontext-cookies.spec.ts +++ b/test/browsercontext-cookies.spec.ts @@ -16,7 +16,7 @@ */ import utils from './utils'; -const {WEBKIT, WIN} = testOptions; +const {FFOX, WEBKIT, WIN} = testOptions; it('should return no cookies in pristine browser context', async({context, page, server}) => { expect(await context.cookies()).toEqual([]); @@ -37,7 +37,7 @@ it('should get a cookie', async({context, page, server}) => { expires: -1, httpOnly: false, secure: false, - sameSite: 'None', + sameSite: FFOX ? 'Lax' : 'None', }]); }); @@ -59,7 +59,7 @@ it('should get a non-session cookie', async({context, page, server}) => { expires: date / 1000, httpOnly: false, secure: false, - sameSite: 'None', + sameSite: FFOX ? 'Lax' : 'None', }]); }); @@ -115,7 +115,7 @@ it('should get multiple cookies', async({context, page, server}) => { expires: -1, httpOnly: false, secure: false, - sameSite: 'None', + sameSite: FFOX ? 'Lax' : 'None', }, { name: 'username', @@ -125,7 +125,7 @@ it('should get multiple cookies', async({context, page, server}) => { expires: -1, httpOnly: false, secure: false, - sameSite: 'None', + sameSite: FFOX ? 'Lax' : 'None', }, ]); }); diff --git a/test/defaultbrowsercontext.spec.js b/test/defaultbrowsercontext.spec.js index 13d9961835..27373f8db0 100644 --- a/test/defaultbrowsercontext.spec.js +++ b/test/defaultbrowsercontext.spec.js @@ -65,7 +65,7 @@ it('context.cookies() should work', async ({server, launchPersistent}) => { expires: -1, httpOnly: false, secure: false, - sameSite: 'None', + sameSite: FFOX ? 'Lax' : 'None', }]); }); @@ -126,7 +126,7 @@ it('should(not) block third party cookies', async ({server, launchPersistent}) = return document.cookie; }); await page.waitForTimeout(2000); - const allowsThirdParty = CHROMIUM || FFOX; + const allowsThirdParty = CHROMIUM; expect(documentCookie).toBe(allowsThirdParty ? 'username=John Doe' : ''); const cookies = await context.cookies(server.CROSS_PROCESS_PREFIX + '/grid.html'); if (allowsThirdParty) { diff --git a/test/headful.spec.js b/test/headful.spec.js index 5540e9ab6c..9b0ffb7f90 100644 --- a/test/headful.spec.js +++ b/test/headful.spec.js @@ -109,7 +109,7 @@ it('should(not) block third party cookies', async({browserType, defaultBrowserOp return document.cookie; }); await page.waitForTimeout(2000); - const allowsThirdParty = CHROMIUM || FFOX; + const allowsThirdParty = CHROMIUM; expect(documentCookie).toBe(allowsThirdParty ? 'username=John Doe' : ''); const cookies = await page.context().cookies(server.CROSS_PROCESS_PREFIX + '/grid.html'); if (allowsThirdParty) { diff --git a/test/page-goto.spec.js b/test/page-goto.spec.js index 1e74355768..53ff33bd33 100644 --- a/test/page-goto.spec.js +++ b/test/page-goto.spec.js @@ -117,7 +117,7 @@ it('should return response when page changes its URL after load', async({page, s expect(response.status()).toBe(200); }); -it('should work with subframes return 204', async({page, server}) => { +it.fail(FFOX)('should work with subframes return 204', async({page, server}) => { server.setRoute('/frames/frame.html', (req, res) => { res.statusCode = 204; res.end(); diff --git a/test/page-wait-for-navigation.spec.js b/test/page-wait-for-navigation.spec.js index 970aa8caa5..e53d97a175 100644 --- a/test/page-wait-for-navigation.spec.js +++ b/test/page-wait-for-navigation.spec.js @@ -141,7 +141,7 @@ it('should work with DOM history.back()/history.forward()', async({page, server} expect(page.url()).toBe(server.PREFIX + '/second.html'); }); -it('should work when subframe issues window.stop()', async({page, server}) => { +it.fail(FFOX)('should work when subframe issues window.stop()', async({page, server}) => { server.setRoute('/frames/style.css', (req, res) => {}); const navigationPromise = page.goto(server.PREFIX + '/frames/one-frame.html'); const frame = await new Promise(f => page.once('frameattached', f)); diff --git a/test/proxy.spec.js b/test/proxy.spec.js index 648c3f4cf4..667bdd16b1 100644 --- a/test/proxy.spec.js +++ b/test/proxy.spec.js @@ -87,7 +87,10 @@ it('should exclude patterns', async ({browserType, defaultBrowserOptions, server it('should use socks proxy', async ({ browserType, defaultBrowserOptions, parallelIndex }) => { const server = socks.createServer((info, accept, deny) => { + let socket; if (socket = accept(true)) { + // Catch and ignore ECONNRESET errors. + socket.on('error', () => {}); const body = 'Served by the SOCKS proxy'; socket.end([ 'HTTP/1.1 200 OK',