Seleniumスクリプトを記録するために、キーアップやクリックなど、ページ上のすべてのイベントをインターセプトできる必要があります。現在、ページ上のすべての要素にイベントリスナーをアタッチすることでこれを行っていますが、イベントのバブリングを停止するリスナーがすでに存在する場合、イベントが私に届くことはありません。
デバッグ時またはJavaScriptコードからDOMノードでイベントリスナーを見つける方法のhttps://stackoverflow.com/a/6434924/15255から「addEventListenerを置き換える」アプローチを試しました。、しかしこれはうまくいかないようです。
これはすべてFirefoxアドオンに含まれているので、特権的なことを行うことができますが、既存のリスナーを列挙または変更するための機能はあまりないようです。誰かがこれを行う方法についての提案がありますか?
編集:現状のコード:
jQuery(frame.document).
bind("dblclick", {}, this.listeners.writeJsonClicks, true).
bind("keyup", {}, this.listeners.writeJsonChange, true).
bind("change", {}, this.listeners.writeJsonChange, true);
明確にするために:frame.document内のドキュメントの内容を制御することはできません。これは、ユーザーがスクリプトを記録しているページです。問題は、ドキュメントが読み込まれるまでに、独自のキャプチャがすでにインストールされているため、イベントを受信できないことです。
ページDOMが完全に読み込まれたときに、読み込み中のある時点でページをキャッチしようとしましたが、リスナーをアタッチするJSはまだ実行されていません。NsIObserverServiceを使用しdocument-element-inserted
て有望に見えますが、そのイベントはDOMが存在するとすぐに発生します。ドキュメントとそのヘッドはロードされますが、本文はロードされません。
基本的に、既存のリスナーを並べ替えて、以前のリスナーの前に挿入する方法、DOMツリーがロードされているがJSがまだ実行されていないときにコードを実行できる方法、または方法のいずれかが必要です。 addEventListenerへの呼び出しをインターセプトして、追加されたリスナーをラップし、盗聴させます。