如何捕捉页面中的webdriver提出的所有要求? 是否有任何替代Browsermob?(How

2019-06-24 19:09发布

我使用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将是一个伟大加。

Answer 1:

我发现了一个谷歌组讨论的话题 。 这些链接看起来很有前途的替代Browsermob:

  • 硒CaptureNetworkTraffic实施例中的Java
  • HOWTO:收集webdriver的HTTP请求和响应头
  • 自动化的Web定时捕获与硒2


Answer 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"));


Answer 3:

我一直对这种代理的工作最近。 项目是很新鲜的,我还在工作的文档,但它可能是值得一试。 来源和例子在这里

  1. 添加依赖到项目
    <dependency>
       <groupId>com.moxproxy</groupId>
       <artifactId>moxproxy.core</artifactId>
       <version>1.0.2</version>
    </dependency>
  1. 启动代理
    MoxProxy proxy = LocalMoxProxy.builder()
                .withPort(89)
                .build();
    proxy.startServer();
  1. 设置硒的webdriver localhost上使用代理与端口89和运行测试

  2. 收集与交通

    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?