12

Firefox、Chrome、Internet Explorer、および Safari で動作する WebDriver を使用して、これらの試みのいずれかを拡張したり、JS エラーをキャッチするための他のアイデアを誰かが持っているかどうか疑問に思っています。

これまでに試みられたものは次のとおりです:
試み– 問題:

JSErrorCollector.jar - 正常に動作しますが、Firefox のみのソリューションです。

ページ ソースに JS を挿入するwindow.onerrorWebDriver を使用してページのソース コードにコードを挿入しましたが、挿入が遅すぎるため、初期エラーはすべて見逃されています。

BrowserMobwindow.onerror – HTTP 応答をインターセプトでき、応答本文にコードを挿入する予定でしたが、作成者はgetBody()まだメソッドを実装していないため、変更できるのはヘッダーのみであることがわかっています。本文は、すべての応答に対して常に null です。(著者が実装について話している Web ページにいましたが、getBody()まだ実装されておらず、再び見つけることができません)

Fiddler – JS は正しく挿入されますが、Fiddler は Windows 専用であるため、Safari は機能しません。

親/子ウィンドウ– JavaScript を使用して、テスト ページのウィンドウを開いて参照を保存します。はwindow.onerror code親ウィンドウに含まれているため、子ウィンドウの起動エラーを見逃すことはありません。これを Firefox と Chome 以外で動作させることはできません。私はすでにここでそれについて質問しました.

Selenium RC – すべてのテストで WebDriver を使用しているため試していませんが、 のようなメソッドがあることは知っていcaptureNetworkTraffic()ますが、WebDriver で使用できるとは思いません。

IE エラー ポップアップ– Firefox/Chrome の親子ソリューションを使用して、IE エラー ポップアップを探します。表示する設定にチェックを入れると、このポップアップが表示されます。ポップアップはネイティブのウィンドウ ウィンドウ (だと思います) であるため、セレンを使用してアクセスすることはできません。

ブラウザー コンソールを読む– すべてのブラウザーでこれを行う方法を見つけることができませんでした。Chrome では、コンソール ログをファイルに保存してからファイルを読み取る方法を見つけました。それは私が得た限りです。

BrowserMob はクロス ブラウザー ソリューションのように見えるため、BrowserMob に似たソリューションが必要です。テストに入れて応答を傍受できる他のプロキシはありますか? getBody()この方法が実装されていれば最高でした。シンプルなクロスブラウザソリューションのように見えるので、親子ソリューションも気に入っていますが、IEでは機能しません(親子の質問が再びあります)。

助けてくれてありがとう。

4

1 に答える 1

1

テスト フレームワークで Javascript コード エラーを直接キャッチする方法を知りません。推測すると、PhantomJSを使用します。または、MITM Proxyのようなものが機能するでしょうか?

補足として、別のノードで Selenium2 Grid Hub を実行する場合、このようにノードの JVM に Java オプションを渡すことができます。これにより、Fiddler を介したプロキシが機能します。Fiddler は (デフォルトで) ポート 8888 をリッスンします。この方法を使用すると、パケットを監視できます。

:: batch script: Set JAVA_OPTS java options to JVM
SET "JAVA_OPTS=-Dwebdriver.chrome.^
 driver=%CHROMEDRIVER%"
IF "%PROXY_TO_FIDDLER%"=="true" SET "JAVA_OPTS=%JAVA_OPTS% -DproxySet=true^
 -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888"

ここで、グリッドとノードを開始するために使用できるスクリプトを作成しました。この方法を使用して、ポート 8080 で BrowserMob プロキシとも通信できるように思えますか? 私はそれを試していません。

于 2013-07-26T18:38:13.893 に答える