test: relax event location expectation (#22668)

The actual pageX/pageY values vary between browsers, os versions and
headed/headless. Relaxing the expectation to ensure that the result is
sensible after the pixel conversions.
This commit is contained in:
Yury Semikhatsky 2023-04-26 17:22:01 -07:00 committed by GitHub
parent c5880f9994
commit e809ecdc5d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -16,8 +16,7 @@
*/ */
import { browserTest as it, expect } from '../config/browserTest'; import { browserTest as it, expect } from '../config/browserTest';
import { attachFrame, chromiumVersionLessThan } from '../config/utils'; import { attachFrame } from '../config/utils';
import os from 'os';
it('should not be visible in context.pages', async ({ contextFactory }) => { it('should not be visible in context.pages', async ({ contextFactory }) => {
const context = await contextFactory(); const context = await contextFactory();
@ -80,7 +79,7 @@ it('should click the button with deviceScaleFactor set', async ({ browser, serve
await context.close(); await context.close();
}); });
it('should click the button with offset with page scale', async ({ browser, server, headless, browserName, browserVersion, isMac }) => { it('should click the button with offset with page scale', async ({ browser, server, browserName }) => {
it.skip(browserName === 'firefox'); it.skip(browserName === 'firefox');
const context = await browser.newContext({ viewport: { width: 400, height: 400 }, isMobile: true }); const context = await browser.newContext({ viewport: { width: 400, height: 400 }, isMobile: true });
@ -92,25 +91,14 @@ it('should click the button with offset with page scale', async ({ browser, serv
}); });
await page.click('button', { position: { x: 20, y: 10 } }); await page.click('button', { position: { x: 20, y: 10 } });
expect(await page.evaluate('result')).toBe('Clicked'); expect(await page.evaluate('result')).toBe('Clicked');
const round = x => Math.round(x + 0.01); const expectCloseTo = (expected, actual) => {
let expected = { x: 28, y: 18 }; // 20;10 + 8px of border in each direction if (Math.abs(expected - actual) > 2)
if (browserName === 'webkit') { throw new Error(`Expected: ${expected}, received: ${actual}`);
// WebKit for macOS 12 has different expectations starting r1829. };
if (isMac && parseInt(os.release(), 10) < 21) { // Expect 20;10 + 8px of border in each direction. Allow some delta as different
// WebKit rounds down during css -> dip -> css conversion. // browsers round up or down differently during css -> dip -> css conversion.
expected = { x: 26, y: 17 }; expectCloseTo(28, await page.evaluate('pageX'));
} else { expectCloseTo(18, await page.evaluate('pageY'));
expected = { x: 29, y: 19 };
}
} else if (browserName === 'chromium' && headless) {
// Headless Chromium rounds down during css -> dip -> css conversion.
expected = { x: 27, y: 18 };
} else if (browserName === 'chromium' && !headless && !chromiumVersionLessThan(browserVersion, '92.0.4498.0')) {
// New headed Chromium rounds down during css -> dip -> css conversion as well.
expected = { x: 27, y: 18 };
}
expect(round(await page.evaluate('pageX'))).toBe(expected.x);
expect(round(await page.evaluate('pageY'))).toBe(expected.y);
await context.close(); await context.close();
}); });