テキストボックスにいくつかの入力フィルタリングコードのテストを書きたいと思います。ほとんどのテストでは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テストから除外したいと思います。
このすべての後、問題は、誰かが実際に入力を変更するためにそのコードを取得する方法を知っていますか?設定を微調整し、プラグインをインストールしますか?
私の質問に答えない質問のリスト