如何捕获webdriver中页面发出的所有请求? Browsermob还有其他选择吗?

我正在使用Selenium2 / WebDriver来测试我的Web应用程序。 所有测试都是用Java编写的,并与Maven一起运行。

在使用webdriver打开页面时,我想捕获页面发出的所有请求(图像,js和css文件等)。 我使用这些数据主要有两个原因

  • 检查呼叫中的404(以及其他错误)
  • 检查分析代码是否正常工作(检查它是否正在发送正确的请求)

根据项目,我使用Firebug和Netexport或Browsermob代理。 在这两种情况下,我都可以轻松获取HAR(Html ARchive)文件,解析它并提取我想要的数据。

问题在于:我对这些解决方案都不满意。 当页面包含加载太长时间的video时,我特别遇到获取HAR文件的问题。 我正在寻找更稳定的东西。

所以,问题是:

Browsermob还有其他选择吗? 我知道FiddlerCore,但它是一个.NET库,我的测试是用Java编写的。 我也听说过Ajax DynaTrace,我知道有一些方法可以将它与Selenium集成,但我发现的文档是Selenium-RC而不是WebDriver。

有没有办法将DynaTrace与WebDriver集成或使用FiddlerCore与Java?

有没有其他方法来实现我提到的目标? 我正在寻找一个可以从我的代码中轻松控制的代理。 将数据导出到HAR将是一个很好的选择。

我找到了关于该主题的谷歌小组讨论。 这些链接看起来像Browsermob的有前途的替代品:

  • Java中的Selenium CaptureNetworkTraffic示例
  • HOWTO:收集WebDriver HTTP请求和响应标头
  • 使用Selenium 2自动捕获Web计时

有一个替代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) SeleniumUtils.executeScript(driver, "return window.HarEntries")); 
Interesting Posts