From c6f16f2548e2dd3ef442d38ce1aa410180cf01cc Mon Sep 17 00:00:00 2001 From: TheMapleBin <143498712+TheMapleBin@users.noreply.github.com> Date: Tue, 12 May 2026 23:02:16 +0800 Subject: [PATCH] fix: prevent duplicate character insertion in press_key() for contenteditable press_key() was sending printable text through both keyDown(text=...) and char(text=...). For contenteditable elements, Chromium may insert text during both phases, causing each character to appear twice. This removes text from the keyDown event and keeps the char event as the only insertion-bearing event. --- src/browser_harness/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/browser_harness/helpers.py b/src/browser_harness/helpers.py index 3efb609c..b871c440 100644 --- a/src/browser_harness/helpers.py +++ b/src/browser_harness/helpers.py @@ -256,7 +256,7 @@ def press_key(key, modifiers=0): so listeners checking e.keyCode / e.key all fire.""" vk, code, text = _KEYS.get(key, (ord(key[0]) if len(key) == 1 else 0, key, key if len(key) == 1 else "")) base = {"key": key, "code": code, "modifiers": modifiers, "windowsVirtualKeyCode": vk, "nativeVirtualKeyCode": vk} - cdp("Input.dispatchKeyEvent", type="keyDown", **base, **({"text": text} if text else {})) + cdp("Input.dispatchKeyEvent", type="keyDown", **base) if text and len(text) == 1: cdp("Input.dispatchKeyEvent", type="char", text=text, **{k: v for k, v in base.items() if k != "text"}) cdp("Input.dispatchKeyEvent", type="keyUp", **base)