expected - sleep in selenium java
¿Manera correcta de probar el tiempo de carga de la página en selenio? (1)
Hay 2 formas de hacer esto que te darán datos significativos.
Utilice Browsermob Proxy con Selenium. Este es un ejemplo en Python pero es más o menos lo mismo 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 de proxy.har
, que es solo un blob JSON, le proporcionará la información que necesita. Blogé sobre esto a principios de este año
El otro enfoque es utilizar las especificaciones de tiempos de navegación disponibles en los navegadores modernos. Todo lo que necesita hacer es ejecutar algunos javaScript y obtendrá detalles de la 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 */
Estoy intentando 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á.
Mi primer enfoque es llamar lo 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 que a veces obtengo el resultado del tiempo antes de que la página realmente se haya cargado (es decir, recibo 50ms veces), así que supongo que el control se driver.get()
a la siguiente instrucción antes de que se haya completado el driver.get()
.
¿Qué debo hacer para mejorar esta prueba?
EDITAR:
Como user1258245 sugirió que podría esperar a que se cargue un elemento, pero el problema es que no sé qué páginas se cargarán de antemano.