diff --git a/.github/workflows/tests_primary.yml b/.github/workflows/tests_primary.yml index eed38d676e..c9930d1b18 100644 --- a/.github/workflows/tests_primary.yml +++ b/.github/workflows/tests_primary.yml @@ -144,8 +144,8 @@ jobs: DEBUG: pw:install - run: npm run build - run: npx playwright install --with-deps - - run: xvfb-run npm run test-html-reporter - - run: xvfb-run npm run test-web + - run: npm run test-html-reporter + - run: npm run test-web if: always() test-package-installations: diff --git a/tests/installation/connect-to-selenium.spec.ts b/tests/installation/connect-to-selenium.spec.ts index a155f1b090..4e72c32c24 100755 --- a/tests/installation/connect-to-selenium.spec.ts +++ b/tests/installation/connect-to-selenium.spec.ts @@ -18,7 +18,7 @@ import path from 'path'; import { test } from './npmTest'; test('connect to selenium', async ({ exec, tmpWorkspace }, testInfo) => { - test.fixme(os.platform() !== 'linux'); + test.skip(os.platform() !== 'linux'); await exec('npm i --foreground-scripts playwright-core'); await exec(`node download-chromedriver.js ${path.join(tmpWorkspace)}`); diff --git a/tests/library/browsercontext-cookies.spec.ts b/tests/library/browsercontext-cookies.spec.ts index 8504cd35ef..d0cfdb6cec 100644 --- a/tests/library/browsercontext-cookies.spec.ts +++ b/tests/library/browsercontext-cookies.spec.ts @@ -353,7 +353,7 @@ it('should be able to send third party cookies via an iframe', async ({ browser, it('should support requestStorageAccess', async ({ page, server, channel, browserName, isMac, isLinux, isWindows }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/17285' }); it.skip(browserName === 'chromium', 'requestStorageAccess API is not available in Chromium'); - it.fixme(channel === 'firefox-beta', 'hasStorageAccess returns true, but no cookie is sent'); + it.skip(channel === 'firefox-beta', 'hasStorageAccess returns true, but no cookie is sent'); server.setRoute('/set-cookie.html', (req, res) => { res.setHeader('Set-Cookie', 'name=value; Path=/'); diff --git a/tests/library/browsercontext-har.spec.ts b/tests/library/browsercontext-har.spec.ts index 07c7ee62ee..32e8611993 100644 --- a/tests/library/browsercontext-har.spec.ts +++ b/tests/library/browsercontext-har.spec.ts @@ -184,8 +184,6 @@ it('should goBack to redirected navigation', async ({ context, asset, server }) }); it('should goForward to redirected navigation', async ({ context, asset, server, browserName }) => { - it.fixme(browserName === 'firefox', 'Flaky in firefox'); - const path = asset('har-redirect.har'); await context.routeFromHAR(path, { url: /.*theverge.*/ }); const page = await context.newPage(); diff --git a/tests/library/browsercontext-proxy.spec.ts b/tests/library/browsercontext-proxy.spec.ts index 367d6f9d58..a25965e4d4 100644 --- a/tests/library/browsercontext-proxy.spec.ts +++ b/tests/library/browsercontext-proxy.spec.ts @@ -94,6 +94,7 @@ it('should use proxy', async ({ contextFactory, server, proxyServer }) => { it('should set cookie for top-level domain', async ({ contextFactory, server, proxyServer, browserName, isLinux }) => { it.fixme(browserName === 'webkit' && isLinux); + proxyServer.forwardTo(server.PORT); const context = await contextFactory({ proxy: { server: `localhost:${proxyServer.PORT}` } @@ -129,7 +130,7 @@ it.describe('should proxy local network requests', () => { } ]) { it(`${params.description}`, async ({ platform, browserName, contextFactory, server, proxyServer }) => { - it.fixme(browserName === 'webkit' && platform === 'darwin' && ['localhost', '127.0.0.1'].includes(params.target), 'Flaky on macOS; needs investigation.'); + it.skip(browserName === 'webkit' && platform === 'darwin' && ['localhost', '127.0.0.1'].includes(params.target), 'Mac webkit does not proxy localhost'); const path = `/target-${additionalBypass}-${params.target}.html`; server.setRoute(path, async (req, res) => { @@ -287,8 +288,6 @@ it('should authenticate with empty password', async ({ contextFactory, server, p }); it('should isolate proxy credentials between contexts', async ({ contextFactory, server, browserName, proxyServer }) => { - it.fixme(browserName === 'firefox', 'Credentials from the first context stick around'); - proxyServer.forwardTo(server.PORT); let auth; proxyServer.setAuthHandler(req => { diff --git a/tests/library/browsercontext-route.spec.ts b/tests/library/browsercontext-route.spec.ts index 148289e622..8538957b58 100644 --- a/tests/library/browsercontext-route.spec.ts +++ b/tests/library/browsercontext-route.spec.ts @@ -109,8 +109,6 @@ it('should fall back to context.route', async ({ browser, server }) => { }); it('should support Set-Cookie header', async ({ contextFactory, server, browserName, defaultSameSiteCookieValue }) => { - it.fixme(browserName === 'webkit'); - const context = await contextFactory(); const page = await context.newPage(); await page.route('https://example.com/', (route, request) => { @@ -154,8 +152,6 @@ it('should ignore secure Set-Cookie header for insecure requests', async ({ cont }); it('should use Set-Cookie header in future requests', async ({ contextFactory, server, browserName, defaultSameSiteCookieValue }) => { - it.fixme(browserName === 'webkit'); - const context = await contextFactory(); const page = await context.newPage(); diff --git a/tests/library/capabilities.spec.ts b/tests/library/capabilities.spec.ts index 5cf09ab34b..27af793f59 100644 --- a/tests/library/capabilities.spec.ts +++ b/tests/library/capabilities.spec.ts @@ -110,8 +110,6 @@ it('should play audio @smoke', async ({ page, server, browserName, platform }) = }); it('should support webgl @smoke', async ({ page, browserName, headless }) => { - it.fixme(browserName === 'firefox' && headless); - const hasWebGL = await page.evaluate(() => { const canvas = document.createElement('canvas'); return !!canvas.getContext('webgl'); @@ -119,9 +117,9 @@ it('should support webgl @smoke', async ({ page, browserName, headless }) => { expect(hasWebGL).toBe(true); }); -it('should support webgl 2 @smoke', async ({ page, browserName, headless }) => { +it('should support webgl 2 @smoke', async ({ page, browserName, headless, isWindows }) => { it.skip(browserName === 'webkit', 'WebKit doesn\'t have webgl2 enabled yet upstream.'); - it.fixme(browserName === 'firefox'); + it.fixme(browserName === 'firefox' && isWindows); it.fixme(browserName === 'chromium' && !headless, 'chromium doesn\'t like webgl2 when running under xvfb'); const hasWebGL2 = await page.evaluate(() => { diff --git a/tests/library/download.spec.ts b/tests/library/download.spec.ts index 276f949b75..8f24306d3d 100644 --- a/tests/library/download.spec.ts +++ b/tests/library/download.spec.ts @@ -305,7 +305,7 @@ it.describe('download event', () => { }); it('should report alt-click downloads', async ({ browser, server, browserName }) => { - it.fixme(browserName === 'firefox' || browserName === 'webkit'); + it.fixme(browserName === 'firefox'); // Firefox does not download on alt-click by default. // Our WebKit embedder does not download on alt-click, although Safari does. @@ -524,8 +524,6 @@ it.describe('download event', () => { }); it('should be able to cancel pending downloads', async ({ browser, server, browserName, browserVersion }) => { - // The exact upstream change is in b449b5c, which still does not appear in the first few 91.* tags until 91.0.4437.0. - it.fixme(browserName === 'chromium' && Number(browserVersion.split('.')[0]) < 91, 'The upstream Browser.cancelDownload command is not available before Chrome 91'); const page = await browser.newPage(); await page.setContent(`download`); const [download] = await Promise.all([ @@ -539,8 +537,6 @@ it.describe('download event', () => { }); it('should not fail explicitly to cancel a download even if that is already finished', async ({ browser, server, browserName, browserVersion }) => { - // The exact upstream change is in b449b5c, which still does not appear in the first few 91.* tags until 91.0.4437.0. - it.fixme(browserName === 'chromium' && Number(browserVersion.split('.')[0]) < 91, 'The upstream Browser.cancelDownload command is not available before Chrome 91'); const page = await browser.newPage(); await page.setContent(`download`); const [download] = await Promise.all([ @@ -639,8 +635,8 @@ it('should be able to download a inline PDF file via response interception', asy await page.close(); }); -it('should be able to download a inline PDF file via navigation', async ({ browser, server, asset, browserName }) => { - it.fixme(browserName === 'chromium' || browserName === 'webkit'); +it('should be able to download a inline PDF file via navigation', async ({ browser, server, asset, browserName, headless }) => { + it.fixme((!headless && browserName === 'chromium') || browserName === 'webkit'); const page = await browser.newPage(); await page.goto(server.EMPTY_PAGE); await page.setContent(` diff --git a/tests/library/har.spec.ts b/tests/library/har.spec.ts index cd9c51da62..e92a7b879f 100644 --- a/tests/library/har.spec.ts +++ b/tests/library/har.spec.ts @@ -559,7 +559,8 @@ it('should have popup requests', async ({ contextFactory, server }, testInfo) => }); it('should not contain internal pages', async ({ browserName, contextFactory, server }, testInfo) => { - it.fixme(true, 'https://github.com/microsoft/playwright/issues/6743'); + it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/6743' }); + server.setRoute('/empty.html', (req, res) => { res.setHeader('Set-Cookie', 'name=value'); res.end(); diff --git a/tests/library/headful.spec.ts b/tests/library/headful.spec.ts index 7211fe6609..8b048ee026 100644 --- a/tests/library/headful.spec.ts +++ b/tests/library/headful.spec.ts @@ -152,9 +152,8 @@ it('should not block third party SameSite=None cookies', async ({ httpsServer, b }); it('should not override viewport size when passed null', async function({ browserName, server, browser }) { - it.fixme(browserName === 'webkit'); + it.fixme(browserName === 'webkit', 'Our WebKit embedder does not respect window features'); - // Our WebKit embedder does not respect window features. const context = await browser.newContext({ viewport: null }); const page = await context.newPage(); await page.goto(server.EMPTY_PAGE); @@ -190,8 +189,9 @@ it('Page.bringToFront should work', async ({ browser }) => { await page2.close(); }); -it.skip('should click in OOPIF', async ({ browserName, launchPersistent, server }) => { - it.fixme(browserName === 'chromium'); +it('should click in OOPIF', async ({ browserName, launchPersistent, server }) => { + it.fixme(browserName === 'chromium', 'Click is offset by the infobar height'); + server.setRoute('/empty.html', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(``); @@ -210,7 +210,9 @@ it.skip('should click in OOPIF', async ({ browserName, launchPersistent, server expect(consoleLog).toContain('ok'); }); -it.skip('should click bottom row w/ infobar in OOPIF', async ({ launchPersistent, server }) => { +it('should click bottom row w/ infobar in OOPIF', async ({ browserName, launchPersistent, server }) => { + it.fixme(browserName === 'chromium', 'Click is offset by the infobar height'); + server.setRoute('/empty.html', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(` @@ -245,7 +247,8 @@ it.skip('should click bottom row w/ infobar in OOPIF', async ({ launchPersistent it('headless and headful should use same default fonts', async ({ page, browserName, browserType }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/11177' }); - it.fixme(browserName === 'firefox', 'Text is misaligned in headed vs headless'); + it.skip(browserName === 'firefox', 'Text is misaligned in headed vs headless'); + const genericFontFamilies = [ 'standard', 'serif', diff --git a/tests/library/inspector/cli-codegen-1.spec.ts b/tests/library/inspector/cli-codegen-1.spec.ts index 2c7a7d7668..c85ff66e0f 100644 --- a/tests/library/inspector/cli-codegen-1.spec.ts +++ b/tests/library/inspector/cli-codegen-1.spec.ts @@ -18,7 +18,6 @@ import { test, expect } from './inspectorTest'; test.describe('cli codegen', () => { test.skip(({ mode }) => mode !== 'default'); - test.fixme(({ browserName, headless }) => browserName === 'firefox' && !headless, 'Focus is off'); test('should click', async ({ page, openRecorder }) => { const recorder = await openRecorder(); @@ -609,8 +608,6 @@ test.describe('cli codegen', () => { }); test('should await popup', async ({ page, openRecorder, browserName, headless }) => { - test.fixme(browserName === 'webkit' && !headless, 'Middle click does not open a popup in our webkit embedder'); - const recorder = await openRecorder(); await recorder.setContentAndWait('link'); diff --git a/tests/library/inspector/cli-codegen-2.spec.ts b/tests/library/inspector/cli-codegen-2.spec.ts index 6af03e2750..5183ab69ed 100644 --- a/tests/library/inspector/cli-codegen-2.spec.ts +++ b/tests/library/inspector/cli-codegen-2.spec.ts @@ -105,8 +105,6 @@ test.describe('cli codegen', () => { }); test('should upload a single file', async ({ page, openRecorder, browserName, asset }) => { - test.fixme(browserName === 'firefox', 'Hangs'); - const recorder = await openRecorder(); await recorder.setContentAndWait(`