2013-06-05 16 views
5

Ho un campo di testo ExtJs su una pagina. Lo sto riempiendo di un certo valore in casper.js, che funziona bene.
Quindi desidero mettere a fuoco questo campo e premere il Immettere la chiave, poiché non è presente alcun <form> da inviare.casper.js: premere il tasto "invio" nel campo di inserimento di ExtJs

Quello che ho provato è stato:

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

Avete qualche idea di come per ottenere questo risultato?

risposta

0

2 suggerimenti:

Il primo: provare this.thenEvaluate invece di evaluate. quindi è necessario assicurarsi che la sequenza asincrona funzioni correttamente.

Il secondo: questo potrebbe essere un problema con il client js. In un browser puoi semplicemente controllare la console js, ma non qui. quindi dovresti aggiungere un piccolo aiuto per il debug.

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

Quale trasferirebbe il messaggio della console remota alla console. ora è possibile eseguire il debug del contesto remoto con console.log() e vedere dove (e se) si interrompe.

si dovrebbe anche impostare verbose=true e logLevel="debug" affinché funzioni.

buona fortuna!

+0

Grazie per la risposta e scusa per il mio ritardo. Ho capito che il problema non è a livello casper, ma non è nemmeno nella normale finestra del browser (Chrome). –

1

il codice

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

Guardate la quarta param, credo che dovrebbe essere l'elemento di innesco. Qui dovrebbe essere document.querySelector('#searchfield').

Un suggerimento: in casper valutare, restituire un valore true in final e quindi si otterrà null se c'è qualche errore nel valutare.

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

controllo il risultato, se il successo

+0

Grazie per la risposta. Il quarto parametro è 'viewArg' e di solito solo l'oggetto' window'. Cambiarlo sul mio elemento non cambia nulla, purtroppo. Semplicemente non viene premuto. –

+2

Ora uso '\ n' per inviare il tasto invio, prova questo' this.sendKeys ('# searchfield', 'some text \ n'); ' –