测试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代理与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,将为您提供所需的信息。我今年早些时候在博客上写过

  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

*/

以上是 测试selenium页面加载时间的正确方法? 的全部内容, 来源链接: utcz.com/qa/432825.html

回到顶部