我已经阅读了关于这些问题的所有答案,但没有一个解决方案似乎有效.
此外,我正在获得触发按键的特殊字符的氛围根本不起作用.有人可以验证谁做了这个吗?
如何使用Javascript 检测ctrl+ v,ctrl+ c?
我需要限制粘贴在我的textareas中,最终用户不应该复制和粘贴内容,用户应该只在textarea中键入文本.
怎么做到这一点?
我想在文本框中为一些输入过滤代码编写一些测试.对于大多数测试,我可以调用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
Run Code Online (Sandbox Code Playgroud)
我知道这有限制,因为我们不希望网络应用程序只是假装他们正在为用户行事.但是,这是为了测试我自己的应用程序,我可以使用特定的配置文件启动firefox并安装插件,如果我知道它会有所帮助,甚至可以自己编写.
我所追求的是避免使用Selenium,我想让Java远离我的JS测试,因为它不仅速度慢,而且还必须重新实现Java中的大量DOM查询.
毕竟,问题是,是否有人知道如何让代码实际修改输入?调整设置,安装插件?
没有回答我的问题的问题列表
我发现使用jQuery或本机元素触发器函数模拟实际用户事件越来越困难.例如,如果您有文本输入并且不希望用户能够添加字符,则可以e.preventDefault()使用事件上的jQuery规范化事件对象进行调用keydown.但是,无法以编程方式验证此测试方案.
即使没有调用,以下测试也会通过,preventDefault因为jQuery keydown触发器不是"真实"事件.
input.val('test').trigger(jQuery.Event({
which: 68
});
expect(input).toHaveValue('test');
Run Code Online (Sandbox Code Playgroud)
如果没有正确的代码,此测试应该失败,因为输入的值应为'testd'(68是'd'的字符代码).
有没有人知道任何方法或库来模拟真实的浏览器UI事件?
javascript ×3
jquery ×2
keypress ×2
events ×1
html ×1
jasmine ×1
tdd ×1
triggers ×1
unit-testing ×1