我使用Selenium2 / webdriver的测试我的Web应用程序。 所有的测试都是用Java编写,并使用Maven运行。
在打开页面时用的webdriver我想捕捉页面(图片,js和css文件等)提出的所有要求。 我主要是用这个数据有两个原因
- 检查404(和其他错误)中调用
- 检查是否分析代码工作(检查,如果它的正确的发送请求)
根据项目我用Netexport或Browsermob代理要么萤火虫。 在这两种情况下,我可以很容易地获得HAR(HTML存档)文件,分析它,并提取我想要的数据。
这里的问题:我不开心,既没有这些解决方案。 我有越来越HAR文件时,页面中包含一个被加载时间过长的视频特别的问题。 我在寻找的东西更稳定。
所以,问题是:
是否有任何替代Browsermob? 我知道FiddlerCore但它是一个.NET库和我的测试是用Java编写的。 我也听说过阿贾克斯的dynaTrace我知道有一些方法将它与硒整合,但我发现的文件是为硒-RC没有的webdriver。
有没有什么办法的dynaTrace与集成的webdriver或使用FiddlerCore与Java?
是否有任何其他的方式来实现我所提到的目标是什么? 我找了一个代理,我可以很容易地从我的代码控制。 将数据导出到HAR将是一个伟大加。
我发现了一个谷歌组讨论的话题 。 这些链接看起来很有前途的替代Browsermob:
- 硒CaptureNetworkTraffic实施例中的Java
- HOWTO:收集webdriver的HTTP请求和响应头
- 自动化的Web定时捕获与硒2
有与Firefox替代版本42+,有插件叫火狐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"));
我一直对这种代理的工作最近。 项目是很新鲜的,我还在工作的文档,但它可能是值得一试。 来源和例子在这里
- 添加依赖到项目
<dependency>
<groupId>com.moxproxy</groupId>
<artifactId>moxproxy.core</artifactId>
<version>1.0.2</version>
</dependency>
- 启动代理
MoxProxy proxy = LocalMoxProxy.builder()
.withPort(89)
.build();
proxy.startServer();
设置硒的webdriver localhost上使用代理与端口89和运行测试
收集与交通
List<MoxProxyProcessedTrafficEntry> requestTraffic = proxy.getAllRequestTraffic();
List<MoxProxyProcessedTrafficEntry> responseTraffic = proxy.getAllResponseTraffic();
除了收集运输代理提供posibility修改请求和响应-细节github上
文章来源: How to capture all requests made by page in webdriver? Is there any alternative to Browsermob?