fix(hover): don't emit mouseover event on hover with trial: true

This commit is contained in:
Max Schmitt 2024-09-20 19:10:10 +02:00
parent 33890eb6c5
commit b01b0e8276
2 changed files with 12 additions and 1 deletions

View file

@ -1387,7 +1387,7 @@ const eventType = new Map<string, 'mouse' | 'keyboard' | 'touch' | 'pointer' | '
['devicemotion', 'devicemotion'], ['devicemotion', 'devicemotion'],
]); ]);
const kHoverHitTargetInterceptorEvents = new Set(['mousemove']); const kHoverHitTargetInterceptorEvents = new Set(['mousemove', 'mouseover']);
const kTapHitTargetInterceptorEvents = new Set(['pointerdown', 'pointerup', 'touchstart', 'touchend', 'touchcancel']); const kTapHitTargetInterceptorEvents = new Set(['pointerdown', 'pointerup', 'touchstart', 'touchend', 'touchcancel']);
const kMouseHitTargetInterceptorEvents = new Set(['mousedown', 'mouseup', 'pointerdown', 'pointerup', 'click', 'auxclick', 'dblclick', 'contextmenu']); const kMouseHitTargetInterceptorEvents = new Set(['mousedown', 'mouseup', 'pointerdown', 'pointerup', 'click', 'auxclick', 'dblclick', 'contextmenu']);
const kAllHitTargetInterceptorEvents = new Set([...kHoverHitTargetInterceptorEvents, ...kTapHitTargetInterceptorEvents, ...kMouseHitTargetInterceptorEvents]); const kAllHitTargetInterceptorEvents = new Set([...kHoverHitTargetInterceptorEvents, ...kTapHitTargetInterceptorEvents, ...kMouseHitTargetInterceptorEvents]);

View file

@ -214,6 +214,17 @@ it('should trigger hover state with removed window.Node', async ({ page, server
expect(await page.evaluate(() => document.querySelector('button:hover').id)).toBe('button-6'); expect(await page.evaluate(() => document.querySelector('button:hover').id)).toBe('button-6');
}); });
it('should not emit mouseover event with trial: true', {
annotation: {
type: 'issue',
description: 'https://github.com/microsoft/playwright/issues/32703',
}
}, async ({ page }) => {
await page.setContent(`<button onmouseover="window.__MOUSEOVER = true"></button>`);
await page.hover('button', { trial: true });
expect(await page.evaluate(() => (window as any).__MOUSEOVER)).toBe(undefined);
});
it('should set modifier keys on click', async ({ page, server, browserName, isMac }) => { it('should set modifier keys on click', async ({ page, server, browserName, isMac }) => {
await page.goto(server.PREFIX + '/input/scrollable.html'); await page.goto(server.PREFIX + '/input/scrollable.html');
await page.evaluate(() => document.querySelector('#button-3').addEventListener('mousedown', e => window['lastEvent'] = e, true)); await page.evaluate(() => document.querySelector('#button-3').addEventListener('mousedown', e => window['lastEvent'] = e, true));