在selenium中测试页面加载时间的正确方法?

时间:2012-07-06 10:55:01

标签: java selenium delay web-testing

我正在尝试以编程方式测试网站列表的加载时间。目的是粗略模拟用户将感知的页面加载时间。

我的第一种方法是在循环中调用以下内容:

    startTime = System.currentTimeMillis();
    driver.get("http://" + url);
    diff = System.currentTimeMillis() - startTime;
    System.out.println("Load time was " + diff);

问题有时候我会在页面真正加载之前获得时间结果(即我得到50ms的时间),所以我想在driver.get()完成之前控制权已交给下一条指令。

我应该怎样做才能改善这项测试?

修改

由于user1258245建议我可以等待加载元素,但问题是我不知道哪些页面预先加载。

1 个答案:

答案 0 :(得分:13)

有两种方法可以为您提供有意义的数据。

  1. 将浏览器代理与Selenium一起使用。这是python中的一个例子,但它在Java中几乎相同

    from browsermobproxy import Server
    server = Server("path/to/browsermob-proxy")
    server.start()
    proxy = server.create_proxy()
    
    from selenium import webdriver
    profile  = webdriver.FirefoxProfile()
    profile.set_proxy(proxy.selenium_proxy())
    driver = webdriver.Firefox(firefox_profile=profile)
    
    proxy.new_har("google")
    driver.get("http://www.google.co.uk")
    proxy.har # returns a HAR JSON blob
    
    proxy.stop()
    driver.quit()
    
  2. proxy.har返回的HAR文件(只是一个JSON blob)将为您提供所需的信息。今年早些时候我blogged了解它

    1. 另一种方法是使用现代浏览器中提供的导航时序规范。您需要做的就是执行一些javaScript,您将获得页面加载等的详细信息。

      ((JavascriptExecutor)driver).executeScript("var performance = window.performance || {};" + 
                  "var timings = performance.timing || {};"+
                  "return timings;");
      
      /* The hashmap returned will contain something like the following.
       * The values are in milliseconds since 1/1/1970
       *
       * connectEnd: 1280867925716
       * connectStart: 1280867925687
       * domainLookupEnd: 1280867925687
       * domainLookupStart: 1280867925687
       * fetchStart: 1280867925685
       * legacyNavigationStart: 1280867926028
       * loadEventEnd: 1280867926262
       * loadEventStart: 1280867926155
       * navigationStart: 1280867925685
       * redirectEnd: 0
       * redirectStart: 0
       * requestEnd: 1280867925716
       * requestStart: 1280867925716
       * responseEnd: 1280867925940
       * responseStart: 1280867925919
       * unloadEventEnd: 1280867925940
       */