如何模拟;按住“;(长按)casperjs/phantomjs中的键操作?

如何模拟;按住“;(长按)casperjs/phantomjs中的键操作?,phantomjs,casperjs,keydown,keyup,Phantomjs,Casperjs,Keydown,Keyup,我正在使用casperjs测试一个类似网格的小部件。网格包含大量行。按住Shift键可以多选行,然后单击两个直接行,两次单击之间的行将被选中。下面是我测试此功能的代码段: casper.start(mytesturl); this.then(function sendKeydown(){ //send Shift keydown event this.page.sendEvent('keydown', '', null, null, 0x02000000); }); this.

我正在使用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始终只显示选中了第3行,而不是选中了第0到第3行

我猜问题在于,Casperjs或Phantomjs在运行到其他步骤时不会保留keydown状态,因此每次我发送keydup事件时,它都会充当先按下Shift键的角色,test suite不认为Shift键现在处于按住状态(“keydown”)

所以我想知道我应该如何实现按住Shift键和单击事件


提前谢谢

不触发页面上的事件,而是查找哪个节点正在侦听(例如使用chrome开发工具)所需的事件,然后:

// 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);