Se agotó el tiempo de espera para recibir mensajes del procesador: 0.100 mensajes de registro con ChromeDriver y Chrome v80 a través de Selenium Java

39

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?

DebanjanB
fuente
77
También estoy enfrentando el mismo problema :(
Sooraj
66
Tengo el mismo problema una vez que actualizamos a v80. Sin embargo, su pregunta probablemente debería preguntar cómo solucionarlo, en lugar de preguntar si alguien más se enfrenta al mismo problema.
Taplar
2
No puedo creer que esta pregunta haya sido cerrada. Muchas veces SO falla como motor para ayudar.
Saeed Neamati
44
Enfrentando exactamente el mismo problema. Todo nuestro código de selenio automatizado está roto. Y no podemos rebajar debido a muchas complejidades.
Saeed Neamati
2
@DebanjanB Sí, revisé tu publicación. Espero que puedan solucionarlo en el próximo lanzamiento. Intenté encontrar la solución, así que lo mencioné, pero hay más opciones para evitar el tiempo de espera. Lo intentaré con otra opción, pero si la duración del tiempo de espera es muy inferior, creo que debemos esperar al próximo lanzamiento.
Muzzamil

Respuestas:

24

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:

      System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
      WebDriver driver =  new ChromeDriver();
      driver.quit();
      
    • Salida de consola:

      Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 20041
      Only local connections are allowed.
      Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
      Feb 14, 2020 9:50:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession
      INFO: Detected dialect: W3C
      
  • Si está utilizando Chrome v81 , utilizando el recientemente lanzado ChromeDriver 81.0.4044.20 resuelve el problema.

  • Si está utilizando Chrome desde Dev o Canary Channel, debe elegir los binarios específicos de la plataforma:

Solución permanente

Sin embargo, @bugdroidenvió la corrección real a través de esta revisión / confirmación, que es la siguiente:

[ChromeDriver] suprime el registro del tiempo de espera del bucle de reintento : r1924789 agregó un bucle de reintento mientras esperaba los mensajes de DevTools. Esto envió spam a los registros de los usuarios con informes de tiempo de espera poco informativos. Este CL suprime esos mensajes de registro e informa correctamente el valor del tiempo de espera del comando cuando corresponde.

Nota :

  • Estado: fijo
  • Etiquetas: ToBeReleased ChromeDriver-82

Historia

Este mensaje de error ...

[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100

... 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::HandleEventsUntilpara permitir una verificación adicional del estado de navegación. Pero, desafortunadamente, cuando este tiempo de espera expiraba, se registra como GRAVE (por ProcessNextMessage). En el caso de este pequeño tiempo de espera, no debería registrarse como GRAVE , aunque los tiempos de espera de sí SendCommandInternaldeberí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 :

[WARNING]: This version of ChromeDriver has not been tested with Chrome version 80

lo que suena como ... una solución segura ... y fue confirmado por un miembro del equipo de Chromium .

chromedriver79

  • Bloque de código:

    public class A_Chrome 
    {
        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 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614}) on port 9200
    Only local connections are allowed.
    Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
    [1581503845.444][WARNING]: This version of ChromeDriver has not been tested with Chrome version 80.
    Feb 12, 2020 4:07:26 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: W3C
    

tl; Dr

Puede encontrar un par de discusiones relevantes en:

DebanjanB
fuente
1
También tenga en cuenta que este mensaje de registro parece estar escrito en stderror. Tuve un error en el script de PowerShell después de ejecutar las pruebas usando vstest.console.exeporque la $?variable de PowerShell era $falseaunque las pruebas pasaron. PowerShell parece pensar que todo lo que se está escribiendo en stderror es un error, a pesar de que $LastExitCodepara el corredor de prueba devolvió cero.
Greg Burghardt
44
Re: Chrome v80, utilizando el recientemente lanzado ChromeDriver 80.0.3987.106 resuelve el problema. Re: Chrome v81, utilizando el recientemente lanzado ChromeDriver 81.0.4044.20 resuelve el problema. Todavía veo el problema con las actualizaciones de ChromeDirver.
Neil
1
¡Sí! ChromeDriver v79 win32 funciona bien con Chrome v80.0.3987.132 y no genera un error TimedOut en la consola. Pero a veces Chromedriver no puede iniciar el servidor.
Surodip
1
El uso de la solución alternativa de chromedriver v79 ya no funciona con la última versión de Chrome estable (81.0.4044.92) con el controlador que ni siquiera puede abrir Chrome. Actualicé chromedriver a la última versión y funciona, pero los graves errores de tiempo de espera han regresado.
PST
@PST: exactamente los mismos problemas. esto es frustrante.
Sriram Ilango
10

Causa raíz: cada vez que carga una página con la ayuda del controlador de selenio, entonces la driversecuencia 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á una TimeoutExceptionexcepció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

ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);

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.

    options.addArguments("start-maximized"); 
    options.addArguments("enable-automation"); 
    options.addArguments("--no-sandbox"); 
    options.addArguments("--disable-infobars"); 
    options.addArguments("--disable-dev-shm-usage"); 
    options.addArguments("--disable-browser-side-navigation"); 
    options.addArguments("--disable-gpu");

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)

System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");   
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();

Salida de consola:

Inicio de ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) en el puerto 41540 Solo se permiten conexiones locales. Proteja los puertos utilizados por ChromeDriver y los marcos de prueba relacionados para evitar el acceso de código malicioso. 11 de febrero de 2020 10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFORMACIÓN: Dialecto detectado: W3C [1581412933.937] [SEVERE]: Se agotó el tiempo de recepción del mensaje del procesador: 0.100 [1581412934.066] [SEVERE]: Se agotó el tiempo de espera mensaje de recepción del procesador: 0.100 [1581412934.168] [SEVERE]: Tiempo de espera recibido mensaje del procesador: 0.100 [1581412934.360] [SEVERE]: Tiempo de espera del mensaje de recepción del procesador: 0.100 [1581412934.461] [SEVERE]: Tiempo de espera recibido del mensaje del procesador: 0.100 [1581412934.618] [GRAVE]:

Con la estrategia de PageLoad - Ansioso:

Fragmento de código:

System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver=new ChromeDriver(options);
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();

Salida de consola:

Inicio de ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) en el puerto 1175 Solo se permiten conexiones locales. Proteja los puertos utilizados por ChromeDriver y los marcos de prueba relacionados para evitar el acceso de código malicioso. 11 de febrero de 2020 10:29:05 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Dialecto detectado: W3C
21

Muzzamil
fuente
En general, no podrá ajustar la estrategia de carga de página, ya que las configuraciones de WebDriver están estandarizadas y se ajustan mejor a la estrategia de prueba requerida. Sin embargo, en las discusiones Cómo hacer que Selenium no espere hasta que se cargue la página completa , no espere a que se cargue una página, lo hemos discutido en detalle. Es un problema con ChromeDriver v80.
DebanjanB
2
@DebanjanB Estoy de acuerdo contigo, pero como sabes SO es la comunidad a punto de resolver problemas. Intenté la mejor solución posible disponible. Si sabe que es PROBLEMA o ERROR en el controlador de Chrome, entonces tenemos que registrar este problema en su proyecto Git o en el lugar recomendado. Hacer preguntas en SO no ayudará.
Muzzamil
Recientemente actualicé mi chrome y chromedriver, y luego comencé a recibir todos estos mensajes de advertencia. Ahora estoy tratando de degradar mi Chrome y no puedo encontrar dónde obtener el Chrome 79v. ¿Puede alguien proporcionarme el enlace para descargar Chrome 79v
Vin
@Vin aquí se puede descargar chromedriver.chromium.org/downloads
Muzzamil