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

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

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

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

问题是有时候我会在页面真正加载之前得到时间结果(即我得到50ms),所以我猜控制器在driver.get()完成之前被传递给下一条指令。

我该怎么做才能改进这个测试?

编辑:

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

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

  1. 将Browsermob Proxy与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() 

proxy.har返回的HAR文件(只是一个JSON blob)将为您提供所需的信息。 我今年早些时候在博客上写过这篇文章

  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 */