web-dev-qa-db-ja.com

Webdriverのページで行われたすべてのリクエストをキャプチャする方法は? Browsermobに代わるものはありますか?

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

Webdriverでページを開くときに、ページごとに行われたすべてのリクエスト(画像、js、cssファイルなど)をキャプチャしたいと思います。このデータを使用する主な理由は2つあります

  • 呼び出しで404(およびその他のエラー)を確認する
  • 分析コードが機能しているかどうかの確認(適切なリクエストを送信しているかどうかの確認)

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

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

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

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

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

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

24
JacekM

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

12
r-sal

Firefox ver 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"));
5
Mahesh Dani

私は最近、この種のプロキシに取り組んでいます。プロジェクトはかなり新しく、私はまだドキュメントの作業をしていますが、チェックする価値があるかもしれません。ソースと例は here です

  1. プロジェクトに依存関係を追加します
    <dependency>
       <groupId>com.moxproxy</groupId>
       <artifactId>moxproxy.core</artifactId>
       <version>1.0.2</version>
    </dependency>
  1. プロキシを開始
    MoxProxy proxy = LocalMoxProxy.builder()
                .withPort(89)
                .build();
    proxy.startServer();
  1. ポート89のローカルホストでプロキシを使用するようにSelenium Webdriverを設定し、テストを実行します

  2. トラフィックを収集する

    List<MoxProxyProcessedTrafficEntry> requestTraffic = proxy.getAllRequestTraffic();
    List<MoxProxyProcessedTrafficEntry> responseTraffic = proxy.getAllResponseTraffic();

トラフィックプロキシの収集に加えて、リクエストとレスポンスを変更する可能性を提供します- github の詳細

1
Lukasz A