2016-07-11 12 views
3

격자 모양의 위젯을 테스트하기 위해 casperjs를 사용하고 있습니다. 그리드에는 많은 수의 행이 있습니다. Shift 키를 누른 채 두 행을 클릭하면 행이 여러 번 선택 될 수 있습니다. 그러면 두 번 클릭하는 행이 선택됩니다. 의 afterKeyup,하지만 모두 실패;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)"을 시도 : 다음은이 기능을 테스트하려면 코드 세그먼트는 .png 행 0 ~ 3이 선택된 대신 행 3 만 선택되어 있습니다.

Casperjs 또는 Phantomjs는 다른 단계로 실행될 때 keydown 상태를 유지하지 않으므로 keyup 이벤트를 보낼 때마다 Shift 키가 먼저 눌러지면서 작동합니다. 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);