2016-07-11 12 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, t думаю, что клавиша Shift теперь удерживается («keydown»).

Итак, я хочу знать, как мне сделать, чтобы добиться нажатия и удерживания клавиши Shift вместе с событием click?

Заранее благодарен!

ответ

0

Вместо запуска событие на странице, найти какой узел прослушивает (Ex с хромированной Дев инструментов.) Для необходимых событий, а затем:

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