2013-07-09 13 views
12

Firefox、Chrome、Internet Explorer、Safariで動作するWebDriverを使用してJSエラーをキャッチすることができますか?ここでSelenium WebDriverのJavaScriptエラーをキャッチ - ブラウザに依存しない

がこれまで試みられているものである:
試み - 問題:

JSErrorCollector.jarは - 正常に動作しますが、Firefoxの唯一のソリューションです。ページのソースに

を注入JS - 私はwebdriverをを使用して、ページのソースコードにwindow.onerrorコードを注入しますが、注入が遅すぎるので、任意の初期エラーが失われます。

BrowserMob - 私は、HTTPレスポンスを傍受することができ、応答体にwindow.onerrorコードを挿入するために計画されたが、著者はまだgetBody()メソッドを実装していないので、ヘッダーだけが私が知っていること、変更することができます。本文は、すべての応答に対して常にnullです。フィドラー

(私は著者がgetBody()の実装について話しましたが、それはまだ起きていないと私は再びそれを見つけることができないWebページ上にあった) - JSが正常に注入しますが、フィドラーは、Windowsは、Safariがないようにだけです作業。

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

Selenium RCの - すべての私のテストはwebdriverをを使用するので、私はそれを試していないが、私はそれがcaptureNetworkTraffic()のような方法のいくつかの種類を持って知っているが、私はそれがwebdriverをして​​使用することができないと思います。

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

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

私はBrowserMobと似たソリューションを希望します。なぜなら、それはクロスブラウザソリューションのようだからです。テストに入れて応答を傍受できる他のプロキシはありますか? getBody()メソッドが実装されていれば優れていたでしょう。私は親子ソリューションも好きですが、これは単純なクロスブラウザソリューションのようにも見えますが、IE(parent/child question again)では機能しません。

ありがとうございました。

+1

私が知る限り、現在利用可能なすべての解決策がリストされています(2013年7月、Selenium 2.33.0)。 [詳細については、公式のSeleniumバグを参照してください。](http://code.google.com/p/selenium/issues/detail?id=148)公式のAPIがなくなるまでは、それらを組み合わせて使用​​する必要がありますあなたがサポートしなければならないすべてのブラウザ用に独自のブラウザアドオンを作成してください。 –

+0

リンクありがとうございます。 – Ryan

+2

あなたはBrowserMobプロキシが[オープンソース](https://github.com/lightbody/browsermob-proxy)であることを認識していますか?不足している機能を実装してプルリクエストを送信することからあなたを止めているのは何ですか? – JimEvans

答えて

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" 

scripts you can use to start your grid and node hereを作成しました。この方法を使用して、ポート8080のBrowserMobプロキシと話をすることができるようですか?私はそれを試していない。

+0

私は現在パケットを見るためにFiddlerを使用していますが、グリッド設定はありません。私はあなたのコードを調べます。答え/コードありがとう。 – Ryan

+0

私は、ページソースがグリッドハブとノードの間を通過しないと推測します。 Javascriptエラーが発生したノードインスタンス上の各Webブラウザセッションは、それぞれのサンドボックスにあります。 JQueryインジェクションを使用するあなたの考えは私にはそれを行う唯一の方法だと思われますが、私はあなたがエラーを早期に捕らえていないと言いました。私は理論化していますが、iFrameラッパーのテストページフレームにページをロードして、jQueryをプリロードし、iframe内のページの読み込みを監視することもできます。その場合、テストドライバはフレームに入るためにswitchToを実行する必要があります。 – djangofan

関連する問題