首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让KeyboardEvents更改HTMLInputElement的值?

如何让KeyboardEvents更改HTMLInputElement的值?
EN

Stack Overflow用户
提问于 2019-03-19 00:09:24
回答 1查看 313关注 0票数 1

我正在尝试为代码创建单元测试,这些代码在输入字符时转换输入元素的值。这是一个简单的keyup事件处理程序,当我在键盘上键入字符时,它会按预期工作。

当我尝试创建一个分派keydown和keyup事件的自动化测试时,我可以看到事件处理程序正在触发,但input元素的value属性从未更改。我尝试过使用JQuery来触发事件,并使用基本的DOM方法;似乎都不起作用。

有没有人能建议如何改变这个值?我假设这是可能的,因为Selenium测试可以做到这一点。

以下是代码的示例:

代码语言:javascript
复制
    function setupTest(elem) {
      const input = elem[0] as HTMLInputElement;
      const letters = "aSdFgH";
      let index = 0;

      $("#injectButton").click(() => {
        const char = letters.charAt(index);
        const keydown = new KeyboardEvent("keydown", {
            key: char,
            shiftKey: char >= 'A' && char <= 'Z'
        });

        const keyup = new KeyboardEvent("keyup", {
            key: char,
            shiftKey: char >= 'A' && char <= 'Z'
        });
        index++;
        input.dispatchEvent(keydown);
        input.dispatchEvent(keyup);
    });

    const report = (name, event) => {
        const target = event.target as HTMLInputElement;
        console.log(name, target.value, event);
    }

    $(elem)
        .focus(event => report("FOCUS", event))
        .keydown(event => report("KEYDOWN", event))
        .keyup(event => report("KEYUP", event))
        .blur(event => report("BLUR", event))
    ;
}
EN

回答 1

Stack Overflow用户

发布于 2019-03-19 19:27:19

@Artem Bozhko是对的-这是不可能的。合成事件(在脚本中创建的事件)具有isTrusted false。不受信任的事件不能触发默认操作,因此它们从不修改输入值。出于明显的安全原因,isTrusted是一个只读属性,所以据我所知,仅此而已。

不幸的是,这使得创建单元测试来验证浏览器中的UI行为是不可能的。我假设Selenium通过与浏览器的低级交互来解决这个问题,但是Selenium对于我想要的那种单元测试来说有点重量级。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55225577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档