我试图以编程测试的网站列表的加载时间。 目的是为了大致模拟网页加载时间,用户将察觉。
我的第一种方法是调用一个循环中执行以下操作:
startTime = System.currentTimeMillis();
driver.get("http://" + url);
diff = System.currentTimeMillis() - startTime;
System.out.println("Load time was " + diff);
问题是,有时我得到的时间结果的页面确实加载之前(即我得到50ms的时间),所以我想控制被交给之前的下一条指令driver.get()
已完成。
我应该怎么做才能提高这个测试?
编辑:
作为user1258245建议我可以等因素来加载,但问题是我不知道是哪个网页生病预先加载。
有2个办法做到这一点,会给你有意义的数据。
使用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()
这是从返回的HAR文件proxy.har
,这仅仅是一个JSON BLOB,会给你你需要的信息。 我在博客今年早些时候它
另一种方法是使用在现代浏览器中可用的导航时序规格。 所有你需要做的是执行一些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 */