2012-05-25 40 views
17

我使用Selenium2/WebDriver来测试我的Web应用程序。所有的测试都是用Java编写的,并使用Maven运行。如何捕获webdriver中页面的所有请求?有没有其他的Browsermob?

虽然用webdriver打开一个页面,我想捕获页面(图像,js和css文件等)所做的所有请求。我主要是用这个数据在呼叫

  • 检查,如果分析代码工作(检查它是否发送正确的请求)
  • 根据两个原因

    • 检查404(和其他错误)项目我使用Firebug与Netexport或Browsermob代理。在这两种情况下,我都可以轻松获得HAR(Html归档)文件,解析并提取我想要的数据。

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

      所以,问题是:

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

      有什么方法可以将DynaTrace与WebDriver集成在一起,或者将Java与FiddlerCore结合使用?

      有没有其他方法可以实现我提到的目标?我正在寻找一个代理,我可以轻松地从我的代码中进行控制。将数据导出到HAR将是一个很大的优点。

    +0

    您可以使用创建一个C#web服务,并从Java – Indraneel

    回答

    5

    有与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); 
    

    并正在运行scr IPT会给我们所有的请求响应

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

    我试着上面的代码。它说〜org.openqa.selenium.JavascriptException:ReferenceError:HAR没有定义〜我如何包含这个依赖。 Selenium3.0.0,FF 51,Mac OS。 – user2649233

    相关问题