我想在文本框中为一些输入过滤代码编写一些测试。对于大多数测试,我可以调用setValue
并触发更改事件,这很容易做到。但是,在这种情况下,因为我想测试输入是否被过滤掉(或不被过滤掉),所以我不能setValue()
直接。
我尝试调度keydown
, keyup
, keypress
,textinput
事件。我可以看到正在调用它们的处理程序,但文本实际上并未显示在文本框中请注意,这仅在 Firefox 中“有效”,我了解其他浏览器的代码看起来会有所不同。
function dispatch(target, eventType, charCode) {
var evt = document.createEvent("KeyboardEvent");
evt.initKeyEvent(
eventType,
true,
true,
window,
false,
false,
false,
false,
charCode,
0
);
target.dispatchEvent(evt);
}
var id = document.getElementById('id');
id.onkeydown = id.onkeyup = id.onkeypress = function() {console.log(arguments)}
dispatch(id, 'keydown', 65);
dispatch(id, 'keyup', 65);
dispatch(id, 'keypress', 65);
dispatch(id, 'textinput', 65);
// I can see the handlers were called but it doesn't display in the text box
我知道这有一些限制,因为我们不希望网络应用程序只是假装它们是在为用户行事。但是,这是为了测试我自己的应用程序,我可以使用特定的配置文件启动 Firefox 并安装插件,或者如果我知道它会有所帮助,甚至可以自己编写。
我所追求的是避免使用 Selenium,我想让 Java 排除在我的 JS 测试之外,因为它不仅速度慢,而且我必须在 Java 中重新实现很多 DOM 查询。
毕竟,问题是,有人知道如何让该代码实际修改输入吗?调整设置,安装插件?
不回答我的问题的问题列表