在Selenium中测试页面加载时间的正确方法是什么?

11

我试图通过编程方式测试一系列网站的加载时间。目的是粗略地模拟用户所感知到的页面加载时间。

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

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

问题是有时候我在页面没有真正加载完成之前就得到了时间结果(例如我得到了50毫秒的时间),所以我猜测在driver.get()完成之前,控制权已经被移交给了下一条指令。

我该怎么做来改善这个测试?

编辑:

正如用户1258245建议的那样,我可以等待一个元素加载完毕,但是问题是我事先不知道将要加载哪些页面。


请参见 https://dev59.com/slfUa4cB1Zd3GeqPIob9。 - Avery
1个回答

14

有两种方法可以做到这一点,并提供有意义的数据。

  1. 使用Selenium和Browsermob代理。 这是一个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
 */ 

太好了!我会选择第一项(即第一个:)。我想我只需要解析HAR文件(刚刚检查过,它只是JSON格式),然后自己输出结果。非常感谢你的帮助。 - cookM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接