8

テキストボックスにいくつかの入力フィルタリングコードのテストを書きたいと思います。ほとんどのテストではsetValue、変更イベントを呼び出してトリガーするだけで済みます。これは簡単に実行できます。ただし、この場合、入力がフィルターで除外される(またはフィルターで除外されない)ことをテストしたいので、setValue()直接テストすることはできません。

keydown、、、イベントkeyupをディスパッチしてみkeypressました。それらのハンドラーが呼び出されていることはわかりますが、テキストは実際にはテキストボックスに表示されません。これはFirefoxでのみ「機能」することに注意してください。他のブラウザーでは、コードの外観が異なることを理解しています。textinput

function dispatch(target, eventType, charCode) {
   var evt = document.createEvent("KeyboardEvent");
   evt.initKeyEvent(
     eventType,
     true,
     true,
     window,
     false,
     false,
     false,
     false,
     charCode,
     0
   );
   target.dispatchEvent(evt);
}


var id = document.getElementById('id');
id.onkeydown = id.onkeyup = id.onkeypress = function() {console.log(arguments)}

dispatch(id, 'keydown', 65);
dispatch(id, 'keyup', 65);
dispatch(id, 'keypress', 65);
dispatch(id, 'textinput', 65);
// I can see the handlers were called but it doesn't display in the text box

ウェブアプリがユーザーのために行動しているように見せかけたくないので、これには制限があることを理解しています。ただし、これは自分のアプリケーションをテストするためのものであり、特定のプロファイルを使用してFirefoxを起動し、プラグインをインストールすることも、役立つことがわかっている場合は自分で作成することもできます。

私が求めているのは、Seleniumの使用を避けることです。遅いだけでなく、Javaで多くのDOMクエリを再実装する必要があるため、JavaをJSテストから除外したいと思います。

このすべての後、問題は、誰かが実際に入力を変更するためにそのコードを取得する方法を知っていますか?設定を微調整し、プラグインをインストールしますか?

私の質問に答えない質問のリスト

4

1 に答える 1

1

少なくとも、次のコードが Chrome で機能することがわかりました。Firefox または IE http://jsfiddle.net/D2s5T/14/では使用できません

function dispatch(target, eventType, char) {
   var evt = document.createEvent("TextEvent");    
   evt.initTextEvent (eventType, true, true, window, char, 0, "en-US");
   target.focus();
   target.dispatchEvent(evt);
}
dispatch(el, "textInput", "a");
于 2013-03-08T23:17:33.997 に答える