Recientemente actualizamos nuestro entorno de prueba con ChromeDriver v80.0.3987.16 y Chrome v80.0.3987.87 (versión oficial) (64 bits) y, después de la actualización, incluso el programa mínimo está produciendo muchos de estos registros GRAVES:
[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100
Anteriormente, estos mensajes se observaban ocasionalmente hasta con ChromeDriver v79.0 / Chrome v79.0 combo.
Bloque de código mínimo:
public class chromeDemo
{
public static void main(String[] args)
{
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://www.google.com/");
driver.quit();
}
}
Salida de consola:
Starting ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185}) on port 9194
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Feb 07, 2020 6:56:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.430][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.531][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.632][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.734][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.835][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.364][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.544][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.647][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.748][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.850][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.952][SEVERE]: Timed out receiving message from renderer: 0.100
¿Alguien enfrenta lo mismo? ¿Hubo algún cambio en ChromeDriver / Chrome v80 con respecto a ChromeDriver / Chrome v79? ¿Alguna pista?
Respuestas:
Solución interina
Aquí están las soluciones para diferentes variantes de usuarios de Chrome .
Si está utilizando Chrome v80 , el uso reciente de ChromeDriver 80.0.3987.106 resuelve el problema.
Bloque de código:
Salida de consola:
Si está utilizando Chrome v81 , utilizando el recientemente lanzado ChromeDriver 81.0.4044.20 resuelve el problema.
Solución permanente
Sin embargo,
@bugdroid
envió la corrección real a través de esta revisión / confirmación, que es la siguiente:Nota :
Historia
Este mensaje de error ...
... no necesariamente indica una falla.
Como @Tricia menciona que, ChromeDriver Versión 80 modificó un ciclo de espera para permitir más reintentos; Este bucle generará ese mensaje, pero continúa escuchando. Sin embargo, la etiqueta SEVERE para ese mensaje es engañosa.
Además, en la discusión Problema 3332: Tiempo de espera de reintento registrado como severo , @triciac [ChromeDriver Committer] también agregó que, el equipo de ChromeDriver agregó un pequeño tiempo de espera (100 ms)
DevToolsClientImpl::HandleEventsUntil
para permitir una verificación adicional del estado de navegación. Pero, desafortunadamente, cuando este tiempo de espera expiraba, se registra como GRAVE (porProcessNextMessage
). En el caso de este pequeño tiempo de espera, no debería registrarse como GRAVE , aunque los tiempos de espera de síSendCommandInternal
deberían hacerlo.Por lo tanto, ChromeDriver necesita una forma de controlar el registro de una mejor manera, posiblemente aumentando el tiempo de espera. Sin embargo, si el comando finalmente agota el tiempo de espera , la duración del tiempo de espera enumerada es muy pequeña, entonces es necesario enumerar el tiempo de espera definido por el usuario.
Solución inmediata
Como solución provisional, puede degradar a ChromeDriver v79.0.3945.36 ya que parece que los registros SEVEROS no se muestran en la consola, pero observará la ADVERTENCIA :
lo que suena como ... una solución segura ... y fue confirmado por un miembro del equipo de Chromium .
Bloque de código:
Salida de consola:
tl; Dr
Puede encontrar un par de discusiones relevantes en:
fuente
vstest.console.exe
porque la$?
variable de PowerShell era$false
aunque las pruebas pasaron. PowerShell parece pensar que todo lo que se está escribiendo en stderror es un error, a pesar de que$LastExitCode
para el corredor de prueba devolvió cero.Causa raíz: cada vez que carga una página con la ayuda del controlador de selenio, entonces la
driver
secuencia de comandos espera hasta que la página se cargue por completo. Pero en algún momento webdriver tarda más tiempo en cargar la página, en ese caso verá unaTimeoutException
excepción en su consola.Solución: cuando la carga de la página lleva demasiado tiempo y necesita dejar de descargar recursos adicionales (imágenes, CSS, JS, etc.) , puede cambiar la PageLoadStrategy a través del controlador web.
El siguiente código solo carga el contenido html de la página. Puede establecer la estrategia de carga de la página desde las opciones de Chrome
Solución actualizada -2: Estoy de acuerdo con DebanjanB, la estrategia PageLoad con None, sin descargar archivos adicionales (imágenes, css, js, etc.) no es una buena idea al realizar las pruebas. Busqué todos los problemas al respecto e intenté encontrar una solución válida. Intenté las siguientes opciones, ya que en algún momento fue capaz de resolver este problema.
Ninguno de ellos ayudó Pero encontré una solución nuevamente con la estrategia de carga de página. Esta vez estamos descargando todos los recursos secundarios pero estamos esperando el evento DOMContentLoaded . Esta estrategia llamada Eager . Una pequeña definición de las 3 estrategias de carga de páginas disponibles
1. normal: esta estrategia hace que Selenium espere a que se cargue la página completa (contenido html y recursos secundarios descargados y analizados).
2. ansioso: esta estrategia hace que Selenium espere el evento DOMContentLoaded (contenido html descargado y analizado únicamente).
3. ninguno: esta estrategia hace que Selenium regrese inmediatamente después de que el contenido inicial de la página se reciba por completo (contenido html descargado).
NOTA: De manera predeterminada, cuando Selenium carga una página, sigue la página pageLoadStrategy normal.
Fragmento de código sin usar la estrategia de carga de página (o Normal como lo usa el selenio por defecto)
Salida de consola:
Con la estrategia de PageLoad - Ansioso:
Fragmento de código:
Salida de consola:
fuente