2012-07-06 21 views
8

Estoy tratando de probar programáticamente el tiempo de carga de una lista de sitios web. El propósito es simular aproximadamente el tiempo de carga de la página que el usuario percibirá.¿Manera correcta de probar el tiempo de carga de la página en selenio?

Mi primer enfoque consiste en llamar al siguiente dentro de un bucle:

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

El problema es a veces me da el resultado de tiempo antes de que la página realmente ha cargado (es decir, me sale 50ms veces) así que supongo que el control se transfiere a la siguiente instrucción antes de que se haya completado el driver.get().

¿Qué debo hacer para mejorar esta prueba?

EDIT:

Como user1258245 sugirió que podía esperar a que un elemento a cargar, pero el problema es que no sé qué páginas enfermedad sea la carga de antemano.

+0

Ver http://stackoverflow.com/questions/6112863/timing-page-load-times- in-selenium – Avery

Respuesta

13

Hay 2 formas de hacerlo que le proporcionarán datos significativos.

  1. Use Browsermob Proxy with Selenium. Este es un ejemplo en Python, pero su más o menos la misma en 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() 
    

El archivo HAR que se devuelve desde proxy.har, que es sólo una gota JSON, le dará la información que necesita. Me blogged al respecto a principios de este año

  1. El otro enfoque es utilizar la especificación de navegaciones horarios disponibles en los navegadores modernos. Todo lo que necesita hacer es ejecutar algunos javascript y obtendrá los detalles de carga de la página, etc.

    ((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 
    */ 
    
+0

¡Eso es genial! Iré con el número 1 (el primero :). Creo que solo analizaré el archivo HAR (simplemente comprobado y es simplemente json) y mostraré los resultados yo mismo. Muchas gracias por su ayuda. – cookM

Cuestiones relacionadas