2013-06-05 14 views
5

Ich habe ein ExtJs Textfeld auf einer Seite. Ich fülle es mit etwas Wert in casper.js, was gut funktioniert.
Dann möchte ich dieses Feld zu fokussieren und drücken Sie die Geben Sie Schlüssel, da es keine <form> um es zu übermitteln.casper.js: Drücken Sie die Taste "Enter" in einem ExtJs Eingabefeld

Was ich versucht war:

casper.then(function() { 
    // the text field is filled with the string 
    this.sendKeys('#searchfield', 'some text'); 

    this.evaluate(function() { 
    // this does not put the field in focus   
    document.querySelector('#searchfield').focus(); 

    // so 'pressing' enter has no effect at all 
    var evt = document.createEvent('KeyboardEvent'); 
    evt.initKeyboardEvent('keypress', true, true, window, 0, 0, 0, 0, 0, 13); 
    document.dispatchEvent(evt); 
    }); 
}); 

Haben Sie eine Ahnung, wie dies zu erreichen?

Antwort

0

2 Vorschläge:

Die erste: versuchen this.thenEvaluate statt evaluate. Dann wird benötigt, um sicherzustellen, dass die asynchrone Sequenz korrekt funktioniert.

Die zweite: Dies ist möglicherweise ein Client-JS-Problem. In einem Browser könntest du einfach die js Konsole überprüfen, aber nicht hier. Daher sollten Sie einen kleinen Debugging-Helfer hinzufügen.

casper.on('log.message', function(msg){ 
    console.log(msg); 
} 

Welches würde Ihre remote Konsolenmeldung an Ihre Konsole übertragen. Jetzt können Sie den Remote-Kontext mit console.log() debuggen und sehen, wo (und wenn) es bricht.

sollten Sie auch verbose=true und logLevel="debug" für dieses arbeiten.

viel Glück!

+0

Vielen Dank für Ihre Antwort und sorry für meine Verspätung. Ich dachte mir, dass das Problem nicht auf Casper-Ebene liegt, sondern dass es nicht mal im normalen Browserfenster (Chrome) geht. –

1

Code

evt.initKeyboardEvent('keypress', true, true, window, 0, 0, 0, 0, 0, 13); 

Blick auf die vierte param, ich denke, es das Auslöseelement sein sollte. Hier sollte document.querySelector('#searchfield') sein.

Ein Hinweis: In casper evaluate, geben Sie ein true im final zurück, und dann erhalten Sie null, wenn ein Fehler in evaluate vorliegt.

var result = this.evaluate(function(){ /*code is here*/ return true;}) 

Prüfung das Ergebnis, wenn der Erfolg

+0

Danke für Ihre Antwort. Der vierte Parameter ist das 'viewArg' und normalerweise nur das' window' Objekt. Das Ändern in mein Element ändert leider nichts. Es wird einfach nicht gedrückt. –

+2

Ich benutze jetzt '\ n', um die Eingabetaste zu senden, probiere dies' this.sendKeys ('# searchfield', 'irgendein Text \ n'); ' –

Verwandte Themen