2016-07-11 9 views
3

Ich verwende Casperjs, um ein Gitter-ähnliches Widget zu testen. Das Raster enthält eine große Anzahl von Zeilen. Die Zeilen können mehrfach ausgewählt werden, indem Sie die Umschalttaste gedrückt halten und dann auf zwei Zeilen klicken. Dann werden die Zeilen mit zweimaligem Klicken ausgewählt. Hier ist mein Code-Segment diese Funktion zu testen:Wie simuliere "drücken und halten" (lang drücken) Tastenaktion in 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'); 

}); 

Ich habe auch versucht "this.page.sendEvent ('keyup', this.page.event.key.Shift);", aber beide scheiterten, die afterKeyup .png zeigt immer an, dass nur die Zeile 3 ausgewählt ist und nicht die Zeilen 0 bis 3 ausgewählt sind.

Ich vermute, das Problem ist, dass die Casperjs oder Phantomjs den Keydown-Status nicht beibehalten, wenn sie in andere Schritte laufen. Jedes Mal, wenn ich ein Keyup-Ereignis sende, wird die Shift-Taste zuerst gedrückt. Ich glaube, die Umschalttaste ist jetzt gedrückt ("keydown").

Also ich möchte wissen, wie ich tun soll, drücken und halten Umschalttaste zusammen mit Klickereignis?

Vielen Dank im Voraus!

Antwort

0

Statt ein Ereignis auf der Seite des Auslösens, finden die Knoten hört (Ex mit Chrom-Entwickler-Tools.) Für die erforderlichen Ereignisse, dann gilt:

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