From c5b294aa22cfea5d43854af9e12b83c2f83b291c Mon Sep 17 00:00:00 2001 From: Raul Macarie Date: Tue, 21 Jul 2026 15:31:33 +0200 Subject: [PATCH] chore: offsets --- .../src/commands/pointer.ts | 2 +- .../fixtures/user-event/pointer.test.ts | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/browser-playwright/src/commands/pointer.ts b/packages/browser-playwright/src/commands/pointer.ts index 518d1af61..9978f654f 100644 --- a/packages/browser-playwright/src/commands/pointer.ts +++ b/packages/browser-playwright/src/commands/pointer.ts @@ -39,7 +39,7 @@ export const pointer: UserEventCommand = async ( // `click` has its own moving logic, no need to move twice if (option.action !== 'click') { if (option.target) { - await hover(context, option.target) + await hover(context, option.target, { position: option.offset }) } else { await context.page.mouse.move(option.coordinates.x, option.coordinates.y) diff --git a/test/browser/fixtures/user-event/pointer.test.ts b/test/browser/fixtures/user-event/pointer.test.ts index c892ede33..407f1da6c 100644 --- a/test/browser/fixtures/user-event/pointer.test.ts +++ b/test/browser/fixtures/user-event/pointer.test.ts @@ -119,6 +119,33 @@ test('down only fires mousedown event', async ({ expect }) => { expect(click).not.toHaveBeenCalled() }) +test.for([ + { action: 'down' }, + { action: 'up' }, + { action: 'click' }, +] as const)('pointer $action action works with offsets', async ({ action }, { expect }) => { + document.body.innerHTML = ` + + ` + + const spy = vi.fn() + + const buttonElement = document.body.querySelector('button') + + buttonElement.addEventListener(action === 'click' ? 'click' : `mouse${action}`, spy) + + await userEvent.pointer([ + { target: buttonElement, offset: { x: 10, y: 10 }, action }, + ]) + + expect(spy).toHaveBeenCalledExactlyOnceWith(expect.objectContaining({ + clientX: expect.closeTo(20, -2), + clientY: expect.closeTo(20, -2), + offsetX: expect.closeTo(10), + offsetY: expect.closeTo(10), + })) +}) + test('multiple clicks trigger double click', async ({ expect }) => { document.body.innerHTML = `` -- 2.51.2