diff --git a/src/server/chromium/chromium.ts b/src/server/chromium/chromium.ts index 0bb91416e8..3772532cf4 100644 --- a/src/server/chromium/chromium.ts +++ b/src/server/chromium/chromium.ts @@ -120,7 +120,8 @@ export class Chromium extends BrowserType { chromeArguments.push( '--headless', '--hide-scrollbars', - '--mute-audio' + '--mute-audio', + '--blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4', ); } if (options.chromiumSandbox === false) diff --git a/test/browsercontext-viewport-mobile.spec.ts b/test/browsercontext-viewport-mobile.spec.ts index 3bda6e352c..223dc6fe9d 100644 --- a/test/browsercontext-viewport-mobile.spec.ts +++ b/test/browsercontext-viewport-mobile.spec.ts @@ -130,4 +130,31 @@ describe('mobile viewport', (suite, parameters) => { expect(await page.evaluate(() => window.innerWidth)).toBe(320); await context.close(); }); + + it('should emulate the hover media feature', (test, parameters) => { + test.fail(options.WEBKIT(parameters)); + }, async ({playwright, browser}) => { + const iPhone = playwright.devices['iPhone 6']; + const mobilepage = await browser.newPage({ ...iPhone }); + expect(await mobilepage.evaluate(() => matchMedia('(hover: hover)').matches)).toBe(false); + expect(await mobilepage.evaluate(() => matchMedia('(hover: none)').matches)).toBe(true); + expect(await mobilepage.evaluate(() => matchMedia('(any-hover: hover)').matches)).toBe(false); + expect(await mobilepage.evaluate(() => matchMedia('(any-hover: none)').matches)).toBe(true); + expect(await mobilepage.evaluate(() => matchMedia('(pointer: coarse)').matches)).toBe(true); + expect(await mobilepage.evaluate(() => matchMedia('(pointer: fine)').matches)).toBe(false); + expect(await mobilepage.evaluate(() => matchMedia('(any-pointer: coarse)').matches)).toBe(true); + expect(await mobilepage.evaluate(() => matchMedia('(any-pointer: fine)').matches)).toBe(false); + await mobilepage.close(); + + const desktopPage = await browser.newPage(); + expect(await desktopPage.evaluate(() => matchMedia('(hover: none)').matches)).toBe(false); + expect(await desktopPage.evaluate(() => matchMedia('(hover: hover)').matches)).toBe(true); + expect(await desktopPage.evaluate(() => matchMedia('(any-hover: none)').matches)).toBe(false); + expect(await desktopPage.evaluate(() => matchMedia('(any-hover: hover)').matches)).toBe(true); + expect(await desktopPage.evaluate(() => matchMedia('(pointer: coarse)').matches)).toBe(false); + expect(await desktopPage.evaluate(() => matchMedia('(pointer: fine)').matches)).toBe(true); + expect(await desktopPage.evaluate(() => matchMedia('(any-pointer: coarse)').matches)).toBe(false); + expect(await desktopPage.evaluate(() => matchMedia('(any-pointer: fine)').matches)).toBe(true); + await desktopPage.close(); + }); });