From b3742101d149cda61ce369543d473797175b377d Mon Sep 17 00:00:00 2001 From: PJ Date: Sun, 31 May 2026 18:02:08 +0530 Subject: [PATCH] feat(chrome): implement LongPress as press-and-hold --- internal/driver/chrome/driver.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/internal/driver/chrome/driver.go b/internal/driver/chrome/driver.go index 0ae6034..2b736be 100644 --- a/internal/driver/chrome/driver.go +++ b/internal/driver/chrome/driver.go @@ -191,6 +191,23 @@ func (d *Driver) PressKey(_ context.Context, key string) error { return chromedp.Run(d.tabCtx, chromedp.KeyEvent(k)) } +func (d *Driver) LongPress(_ context.Context, x, y int) error { + script := fmt.Sprintf(` +(function() { + const el = document.elementFromPoint(%d, %d); + if (!el) return; + el.dispatchEvent(new PointerEvent('pointerdown', {clientX: %d, clientY: %d, bubbles: true})); + setTimeout(function() { + el.dispatchEvent(new PointerEvent('pointerup', {clientX: %d, clientY: %d, bubbles: true})); + }, 600); +})();`, + x, y, + x, y, + x, y, + ) + return chromedp.Run(d.tabCtx, chromedp.Evaluate(script, nil)) +} + // keyMap covers the keys web specs may emit (enter/tab/escape/arrows). // "back"/"home" are intentionally absent: backspace/NUL have no navigation // semantics in a browser, and the V8 action mix already excludes them.