31

Web アプリケーションのテストに Selenium2/WebDriver を使用しています。すべてのテストは Java で記述され、Maven で実行されます。

webdriver でページを開いているときに、ページ (画像、js および css ファイルなど) によって行われたすべての要求をキャプチャしたいと思います。このデータを主に 2 つの理由で使用します

  • 通話中の 404 (およびその他のエラー) のチェック
  • 分析コードが機能しているかどうかの確認 (適切なリクエストを送信しているかどうかの確認)

プロジェクトに応じて、Firebug with Netexport または Browsermob プロキシを使用します。どちらの場合も、HAR (Html ARchive) ファイルを簡単に取得して解析し、必要なデータを抽出できます。

ここに問題があります。私はこれらの解決策のどちらにも満足していません。読み込みに時間がかかりすぎるビデオがページに含まれている場合、HAR ファイルの取得に特に問題があります。より安定したものを探しています。

したがって、質問は次のとおりです。

Browsermob に代わるものはありますか? FiddlerCore については知っていますが、これは .NET ライブラリであり、テストは Java で記述されています。Ajax DynaTrace についても聞いたことがあります。それを Selenium と統合する方法があることは知っていますが、私が見つけたドキュメントは WebDriver ではなく Selenium-RC に関するものでした。

DynaTrace を WebDriver と統合したり、FiddlerCore を Java で使用したりする方法はありますか?

私が言及した目標を達成する他の方法はありますか?コードから簡単に制御できるプロキシを探しています。データを HAR にエクスポートすると、大きなプラスになります。

4

3 に答える 3

14

このトピックに関する Google グループのディスカッションを見つけました。これらのリンクは、Browsermob の有望な代替手段のように見えます。

于 2012-12-19T06:30:35.330 に答える
5

Firefox バージョン 42+ には代替手段があり、Firefox HarExport というアドオンがあります。

File harExportApi = new File(System.getProperty("user.dir")
                     + "/src/main/resources/firebug/harexporttrigger-0.5.0-beta.7.xpi");

netExportProfile.addExtension(harExportApi);
netExportProfile.setPreference("extensions.netmonitor.har.enableAutomation", true);
    netExportProfile.setPreference("extensions.netmonitor.har.contentAPIToken", "test");
    netExportProfile.setPreference("extensions.netmonitor.har.autoConnect", true);

cap.setCapability(FirefoxDriver.PROFILE, netExportProfile);

次のスクリプトを実行すると、すべてのリクエスト応答が得られます

 String getHarLogScript = "var options = {\n" +
                "    token: \"test\",\n" +
                "    getData: true,\n" +
                "    title: \"my custom title\",\n" +
                "    jsonp: false,\n" +
                "  };\n" +
                "\n" +
                "  HAR.triggerExport(options).then(result => {\n" +
                "    var har = JSON.parse(result.data);\n" +
                "\n" +
                "    // Use performance.timing to provide onContentLoad\n" +
                "    +
                "     +
                "    var t = performance.timing;\n" +
                "    var pageTimings = har.log.pages[0].pageTimings;\n" +
                "    pageTimings.onContentLoad = t.domContentLoadedEventStart - t.navigationStart;\n" +
                "    pageTimings.onLoad = t.loadEventStart - t.navigationStart;\n" +
                "\n" +
                "    window.HarEntries=har.log.entries\n" +
                "\n" +
                "    console.log(\"HAR log (\" + result.data.length + \") \", har.log);\n" +
                "  }, err => {\n" +
                "    console.error(err);\n" +
                "  });"

LOG.info("Loading HAR log entries object into browser HarEntries object");
SeleniumUtils.executeScript(driver, getHarLogScript);

harEntries = ((List<Object>) SeleniumUtils.executeScript(driver, "return window.HarEntries"));
于 2015-12-02T13:01:19.043 に答える