Правильный способ проверить время загрузки страницы в selenium?

Я пытаюсь программно проверить время загрузки списка веб-сайтов. Цель состоит в том, чтобы примерно имитировать время загрузки страницы, которое пользователь будет воспринимать.

мой первый подход-вызвать следующее внутри цикла:

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

проблема в том, что иногда я получаю результат времени до того, как страница действительно загрузилась (i.e я получаю 50ms раз), поэтому я думаю, что контроль передается следующей инструкции перед driver.get() завершено.

Что делать чтобы улучшить этот тест?

EDIT:

Как предложил user1258245, я мог бы подождать загрузки элемента, но проблема в том, что я не знаю, какие страницы будут загружаться заранее.

1 ответов


есть 2 способа сделать это, что даст вам значимые данные.

  1. использовать 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, даст вам необходимую информацию. Я!--12-- > в блоге об этом в начале этого года

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