我使用casperjs来测试类似网格的小部件。网格包含大量行。通过按住Shift键可以多次选择行,然后单击两个不同的行,然后两次单击中的行将被选中。以下是我的代码段来测试此功能:
casper.start(mytesturl);
this.then(function sendKeydown(){
//send Shift keydown event
this.page.sendEvent('keydown', '', null, null, 0x02000000);
});
this.then(function startClick(){
//click row 0
this.click('#row0', '50%', '50%');
});
this.then(function secondClick(){
//click row 3
this.click('#row3', '50%', '50%');
});
this.then(function sendKeyup(){
//send Shift keyup event
this.page.sendEvent('keyup', '', null, null, 0x02000000);
this.capture('afterKeyup.png');
});
我也试过" this.page.sendEvent(' keyup',this.page.event.key.Shift);",但都失败了,afterKeyup.png总是显示只选择了row3,而不是选择了0到3行。
我想问题是,Casperjs或Phantomjs在进入其他步骤时不会保持keydown状态,因此每次发送keyup事件时,它都会作为Shift键首先按下,测试套件don& #39;认为Shift键现在处于保持状态(" keydown")。
所以我想知道如何按住Shift键和点击事件来实现?
提前致谢!
答案 0 :(得分:0)
不是在页面上触发事件,而是找到所需事件正在侦听的节点(例如使用chrome dev工具),然后:
// node where event listeners are listening
var element = document.querySelector('foo#bar');
var evt = document.createEvent('HTMLEvents');
evt.initEvent('keydown', false, true);
element.dispatchEvent(evt);