我正在尝试以编程方式测试网站列表的加载时间。目的是粗略地模拟用户感知的页面加载时间。
我的第一种方法是在循环内调用以下内容:
startTime = System.currentTimeMillis();
driver.get("http://" + url);
diff = System.currentTimeMillis() - startTime;
System.out.println("Load time was " + diff);
问题是有时我在页面真正加载之前得到时间结果(即我得到 50 毫秒时间),所以我猜控制权正在被移交给下一条指令之前driver.get()
已完成。
我应该做什么来改进这个测试?
EDIT:
正如 user1258245 建议的那样,我可以等待元素加载,但问题是我不知道要提前加载哪些页面。
有两种方法可以为您提供有意义的数据。
-
将 Browsermob 代理与 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()
返回的 HAR 文件proxy.har
,它只是一个 JSON blob,将为您提供所需的信息。我blogged关于今年早些时候的事
-
另一种方法是使用现代浏览器中可用的导航计时规范。您需要做的就是执行一些 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
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)