2013-06-05 21 views
5

ページにExtJsのテキストフィールドがあります。私はcasper.jsで値を入力していますが、うまくいきます。
次に、このフィールドにフォーカスを合わせてと入力してください。<form>がありません。私が試した何casper.js:ExtJsの入力フィールドに「enter」キーを押します

されました:

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

あなたはどのようにこれを達成するために任意のアイデアを持っていますか?

答えて

0

2提案:

最初:this.thenEvaluateの代わりevaluateを試してみてください。非同期シーケンスが正しく動作することを確認する必要があります。

2番目:これはおそらくクライアントjsの問題です。ブラウザではjsコンソールだけをチェックすることができますが、ここではできません。デバッグヘルパーを少し追加する必要があります。

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

これは、リモートコンソールメッセージをコンソールに転送するものです。今度はconsole.log()でリモートコンテキストをデバッグして、どこでそれが壊れているかを調べることができます。

この設定を有効にするには、verbose=truelogLevel="debug"も設定する必要があります。

幸運!第四のparamで

+0

かのおかげで結果を確認してください。問題はcasperレベルではなく、通常のブラウザウィンドウ(Chrome)でさえもないことがわかりました。 –

1

あなたのコード

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

見て、私はそれがトリガー要素である必要がありますね。ここにはdocument.querySelector('#searchfield')が必要です。

ヒント:casper評価では、finalでtrueを返し、評価でエラーがある場合はnullを返します。

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

、あなたの答えと私の遅れて申し訳ありませんの成功

+0

ご返信ありがとうございます。 4番目のパラメータは 'viewArg'であり、通常は' window'オブジェクトだけです。それを自分の要素に変更しても、残念なことに変更はありません。それは単に押されることはありません。 –

+2

私は現在、入力キーを送るのに '\ n'を使います。この' this.sendKeys( '#searchfield'、 'some text \ n'); ' –

関連する問題