如何捕获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