How to capture all requests made by page in webdriver? Is there any alternative to Browsermob?
I found a google groups discussion on the topic. These links look like promising alternative to Browsermob:
There is an alternative with firefox ver 42+, there is addon called 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);
and running following script will give us all the request responses
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"));
I've been working recently on this kind of proxy. Project is pretty fresh, I'm still working on documentation but it may be worth checking. Sources and examples are here
- Add dependency to your project
<dependency> <groupId>com.moxproxy</groupId> <artifactId>moxproxy.core</artifactId> <version>1.0.2</version> </dependency>
- Start proxy
MoxProxy proxy = LocalMoxProxy.builder() .withPort(89) .build(); proxy.startServer();
Setup selenium webdriver to use proxy on localhost with port 89 and run test
Collect traffic
List<MoxProxyProcessedTrafficEntry> requestTraffic = proxy.getAllRequestTraffic(); List<MoxProxyProcessedTrafficEntry> responseTraffic = proxy.getAllResponseTraffic();
Beside collecting traffic proxy provides posibility to modify requests and responses - details on github