茉莉测试模拟tab键按下并检测新聚焦的元素
Jasmine test simulate tab keydown and detect newly focused element
我有一个茉莉测试,我有2个输入字段。我专注于第一次输入,然后模拟按下"tab"键,并期望将重点放在第二次输入上。不幸的是,事实并非如此。焦点从第一次开始没有改变,我的测试失败了。如何解决这个问题,使失败的测试通过?
我要测试的东西:http://jsfiddle.net/G2Qz3/1/
茉莉测试失败的原因:http://jsfiddle.net/mFUhK/4/
HTML:<input id="first"></input>
<input id="second"></input>
JavaScript: function simulateTab() {
var TAB_KEY = 9;
var keyboardEvent = document.createEvent("KeyboardEvent");
var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";
keyboardEvent[initMethod]("keydown", true, true, window, 0, 0, 0, 0, 0, TAB_KEY);
document.dispatchEvent(keyboardEvent);
}
describe('input tabbing test', function() {
beforeEach(function() {
document.getElementById('first').focus();
});
//this passes
it('input with id "first" should be focussed', function() {
expect(document.activeElement.getAttribute('id')).toBe('first');
});
//this fails
it('input with id "second" should be focussed after tabbing', function() {
simulateTab();
expect(document.activeElement.getAttribute('id')).toBe('second');
});
});
这是不可能的。看看这个SO问题,它是基于本教程的,它说:
请注意,手动触发事件不会生成与该事件关联的默认操作。例如,手动触发焦点事件不会导致元素接收焦点(必须使用其focus方法),手动触发提交事件不会提交表单(使用submit方法),手动触发键事件不会导致该字母出现在焦点文本输入中,手动触发链接上的单击事件不会导致链接被激活,等等。在UI事件的情况下,出于安全原因,这很重要,因为它可以防止脚本模拟与浏览器本身交互的用户操作。
相关文章:
- 将事件聚焦/模糊在可编辑内容的元素上
- jQuery自动完成阻止选择后聚焦
- 使用向下箭头键(与tab键一样)聚焦下一个输入
- 当没有文本输入聚焦时检测空格键按下
- 如何移除或改进:在Bootstrap Carousel上聚焦风格
- 如何在悬停和聚焦时打开引导导航菜单
- 可以't滚动后聚焦输入
- 如何在angular bootstrap ui中聚焦活动导航选项卡中的拳头输入字段
- 无法使用 $('input[name=“rate”]').focus() 聚焦文本框;方法
- 当在输入框中聚焦时,清除页面上的所有间隔
- notify.js没有'如果另一个窗口被聚焦,则不显示通知
- 不允许输入或聚焦的输入类型文本
- 在Chrome中聚焦
- 从onBlur事件中获取新聚焦的元素(如果有的话)
- 输入键以创建新行并聚焦当前输入字段
- 在新窗口中打开链接,或者聚焦到它(如果已经打开)
- 茉莉测试模拟tab键按下并检测新聚焦的元素
- 如何在没有点击、聚焦等事件的情况下绑定新添加的元素?
- 在dojo.gridX中添加新行时如何聚焦第二个Cell
- 打开新窗口,不要聚焦它