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 { attachFrame, chromiumVersionLessThan } from '../config/utils';
import os from 'os';
import { attachFrame } from '../config/utils';
it('should not be visible in context.pages', async ({ contextFactory }) => {
const context = await contextFactory();
@ -80,7 +79,7 @@ it('should click the button with deviceScaleFactor set', async ({ browser, serve
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');
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 } });
expect(await page.evaluate('result')).toBe('Clicked');
const round = x => Math.round(x + 0.01);
let expected = { x: 28, y: 18 }; // 20;10 + 8px of border in each direction
if (browserName === 'webkit') {
// WebKit for macOS 12 has different expectations starting r1829.
if (isMac && parseInt(os.release(), 10) < 21) {
// WebKit rounds down during css -> dip -> css conversion.
expected = { x: 26, y: 17 };
} else {
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);
const expectCloseTo = (expected, actual) => {
if (Math.abs(expected - actual) > 2)
throw new Error(`Expected: ${expected}, received: ${actual}`);
};
// Expect 20;10 + 8px of border in each direction. Allow some delta as different
// browsers round up or down differently during css -> dip -> css conversion.
expectCloseTo(28, await page.evaluate('pageX'));
expectCloseTo(18, await page.evaluate('pageY'));
await context.close();
});