如何在casperjs / phantomjs中模拟"按住"(长按)键动作?

时间:2016-07-11 16:07:51

标签: 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.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键和点击事件来实现?

提前致谢!

1 个答案:

答案 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);