Selenium2/WebDriverを使用して、Webアプリケーションをテストしています。すべてのテストはJavaで記述され、Mavenで実行されます。
Webdriverでページを開くときに、ページごとに行われたすべてのリクエスト(画像、js、cssファイルなど)をキャプチャしたいと思います。このデータを使用する主な理由は2つあります
プロジェクトに応じて、NetexportでFirebugまたはBrowsermobプロキシを使用します。どちらの場合も、HAR(Html ARchive)ファイルを簡単に取得して解析し、必要なデータを抽出できます。
問題は次のとおりです。これらの解決策のどちらにも満足できません。ページに長時間読み込まれているビデオが含まれている場合、HARファイルの取得に特に問題があります。もっと安定したものを探しています。
したがって、質問は次のとおりです。
Browsermobに代わるものはありますか?私はFiddlerCoreについて知っていますが、それは.NETライブラリであり、私のテストはJavaで書かれています。また、Ajax DynaTraceについて聞いたことがあります。AjaxDynaTraceをSeleniumと統合する方法があることは知っていますが、私が見つけたドキュメントはWebDriverではなくSelenium-RCのものでした。
DynaTraceをWebDriverと統合する方法や、FiddlerCoreをJavaと使用する方法はありますか?
私が言及した目標を達成する他の方法はありますか?私は自分のコードから簡単に制御できるプロキシを探しています。データをHARにエクスポートすることは非常に有益です。
Googleグループディスカッション トピック を見つけました。これらのリンクは、Browsermobの有望な代替手段のように見えます。
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"));
私は最近、この種のプロキシに取り組んでいます。プロジェクトはかなり新しく、私はまだドキュメントの作業をしていますが、チェックする価値があるかもしれません。ソースと例は here です
<dependency>
<groupId>com.moxproxy</groupId>
<artifactId>moxproxy.core</artifactId>
<version>1.0.2</version>
</dependency>
MoxProxy proxy = LocalMoxProxy.builder()
.withPort(89)
.build();
proxy.startServer();
ポート89のローカルホストでプロキシを使用するようにSelenium Webdriverを設定し、テストを実行します
トラフィックを収集する
List<MoxProxyProcessedTrafficEntry> requestTraffic = proxy.getAllRequestTraffic();
List<MoxProxyProcessedTrafficEntry> responseTraffic = proxy.getAllResponseTraffic();
トラフィックプロキシの収集に加えて、リクエストとレスポンスを変更する可能性を提供します- github の詳細