如何捕获网页在Webriver中发出的所有请求?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (82)

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

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

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

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

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

所以,问题是:

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

有什么方法可以将DynaTrace与WebDriver集成在一起,还是将JavaFiddlerCore与Java一起使用?

有没有其他方法可以实现我提到的目标?

提问于
用户回答回答于

有一个与Firefox Ver42+的替代,有一个名为FirefoxHarexport的副词

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

所属标签

可能回答问题的人

  • 嗨喽你好

    7 粉丝480 提问8 回答
  • uncle_light

    5 粉丝518 提问6 回答
  • 人生的旅途

    10 粉丝484 提问6 回答
  • 富有想象力的人

    3 粉丝0 提问6 回答

扫码关注云+社区

领取腾讯云代金券