2016-07-11 133 views
3

我正在使用casperjs来测试网格状小部件。网格包含大量的行。可以通过按住Shift键多次选择行,然后单击两个dirrent行,然后两次点击之间的行将被选中。这里是我的代码段来测试此功能:如何模拟casperjs/phantomjs中的“按住”(长按)键动作?

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状态,所以每次发送keyup事件时,都会首先按下Shift键,test suite don' t认为现在按住Shift键(“keydown”)。

所以我想知道我应该怎么做才能实现按住Shift键和点击事件?

在此先感谢!

回答

0

而是在页面上触发的事件,发现该节点是听(出铬开发工具)为所需的事件,则:

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