fix(wpt): apply text edits for testdriver send keys

This commit is contained in:
ldm0
2026-09-27 07:56:03 +08:00
parent 6e733ac620
commit 20349d46cb
2 changed files with 46 additions and 2 deletions
@@ -514,7 +514,7 @@ BENCH_TESTDRIVER_VENDOR_BRIDGE = b"""\
}
function dispatchKey(target, type, key, modifiers) {
target.dispatchEvent(new KeyboardEvent(type, {
return target.dispatchEvent(new KeyboardEvent(type, {
key: key,
altKey: !!modifiers.Alt,
ctrlKey: !!modifiers.Control,
@@ -525,6 +525,29 @@ BENCH_TESTDRIVER_VENDOR_BRIDGE = b"""\
}));
}
function insertSendKeyText(target, key, modifiers) {
if (!target || key.length !== 1 || modifiers.Alt || modifiers.Control) {
return;
}
var codePoint = key.codePointAt(0);
if (codePoint >= 0xE000 && codePoint <= 0xF8FF) {
return;
}
var localName = String(target.localName || '').toLowerCase();
var type = localName === 'input' ? String(target.type || '').toLowerCase() : '';
var isTextControl =
localName === 'textarea' ||
(localName === 'input' &&
['text', 'search', 'tel', 'url', 'email', 'password'].includes(type));
if (!isTextControl && !target.isContentEditable) {
return;
}
var doc = target.ownerDocument || document;
try {
doc.execCommand('insertText', false, key);
} catch (e) {}
}
async function action_sequence(actions, context) {
var pointer = { x: 0, y: 0, target: null, button: 0 };
var modifiers = { Alt: false, Control: false, Shift: false };
@@ -583,6 +606,7 @@ BENCH_TESTDRIVER_VENDOR_BRIDGE = b"""\
}
async function sendKeys(element, keys) {
var wasFocused = document.activeElement === element;
if (
element &&
typeof element.focus === 'function' &&
@@ -590,6 +614,12 @@ BENCH_TESTDRIVER_VENDOR_BRIDGE = b"""\
) {
element.focus();
}
if (!wasFocused && element && typeof element.setSelectionRange === 'function') {
try {
var end = String(element.value || '').length;
element.setSelectionRange(end, end);
} catch (e) {}
}
var modifiers = { Alt: false, Control: false, Shift: false };
for (var keyValue of String(keys || '')) {
var key = keyName(keyValue);
@@ -599,7 +629,10 @@ BENCH_TESTDRIVER_VENDOR_BRIDGE = b"""\
dispatchKey(target, 'keydown', key, modifiers);
continue;
}
dispatchKey(target, 'keydown', key, modifiers);
var keyAllowed = dispatchKey(target, 'keydown', key, modifiers);
if (keyAllowed) {
insertSendKeyText(document.activeElement || target, key, modifiers);
}
dispatchKey(document.activeElement || target, 'keyup', key, modifiers);
}
for (var modifier in modifiers) {
+11
View File
@@ -4032,6 +4032,17 @@ test(() => {}, "ok");
self.assertIn(b"ctrlKey: !!modifiers.Control", BENCH_TESTDRIVER_VENDOR_BRIDGE)
self.assertIn(b"shiftKey: !!modifiers.Shift", BENCH_TESTDRIVER_VENDOR_BRIDGE)
def test_testdriver_vendor_bridge_send_keys_runs_text_edit_default_action(
self,
) -> None:
self.assertIn(b"insertSendKeyText", BENCH_TESTDRIVER_VENDOR_BRIDGE)
self.assertIn(
b"doc.execCommand('insertText', false, key)",
BENCH_TESTDRIVER_VENDOR_BRIDGE,
)
self.assertIn(b"codePoint >= 0xE000", BENCH_TESTDRIVER_VENDOR_BRIDGE)
self.assertIn(b"if (keyAllowed)", BENCH_TESTDRIVER_VENDOR_BRIDGE)
def test_testdriver_vendor_bridge_focuses_user_activation_target(self) -> None:
self.assertIn(b"focusForUserActivation", BENCH_TESTDRIVER_VENDOR_BRIDGE)
self.assertIn(b"document.activeElement === before", BENCH_TESTDRIVER_VENDOR_BRIDGE)