2014-02-18 8 views
6

Ich versuche, einen Test mit CasperJS für ein Szenario zu schreiben, wo das Drücken der Eingabetaste in einer Eingabe der Auslöser für die Seite ist, etwas mit dem sonst in die Eingabe eingegebenen Text zu tun.CasperJS: schluckt spezielle Tasten wie Enter?

Eine gekürzte/vereinfachte Version des CasperJS Tests:

casper.start('http://localhost:3000/input-demo', function() { 
    this.sendKeys('#demo-input', 'demo text'); 
    this.sendKeys('#demo-input', '\uE007'); 
    this.test.assertEquals(this.getHTML('#stage'), 'input demo'); 
}); 

casper.run(); 

(Wo wir es als casperjs test this-test.js laufen)

ich überprüft habe, dass sendKeys den Text in das Eingabe wird immer, aber der Text erscheint nie im #stage Element. Eine "Vanille" -PhantomJS-Implementierung des Tastendrucks funktioniert einwandfrei, wobei webpage.sendEvent('keypress', '\uE007') bewirkt, dass der On-Page-Ereignishandler ausgelöst wird. Betrachtet man die Quelle von casper.sendKeys, sehe ich, dass sie an die sendEvent auf der Instanz PhantomJS der Casper-Instanz (d. H. line 1613 in the current version of casper.js) delegiert.

Irgendwelche Ideen? Hat jemand diese Schlüssel für einen CasperJS-Test bekommen?

Antwort

12

Sie könnten {keepFocus: true} zum ersten sendKeys-Aufruf hinzufügen. Wenn Sie den Quellcode sehen, ohne einen keepFocus hinzuzufügen, verwischt er den Textbereich und das bedeutet, dass Ihr zweiter sendKeys-Aufruf den Tastendruck nicht akzeptiert.

Dies scheint zu funktionieren.

casper.start('http://localhost:3000/input-demo', function() { 
    this.sendKeys('#demo-input', 'demo text', {keepFocus: true}); 
    this.sendKeys('#demo-input', casper.page.event.key.Enter , {keepFocus: true}); 
    this.test.assertEquals(this.getHTML('#stage'), 'input demo'); 
}); 

casper.run(); 
+5

Eine Liste der Sondertasten in casper.page.event.key sehen: https://github.com/ariya/phantomjs/commit/cab2635e66d74b7e665c44400b8b20a8f225153a – pxwise