Timeout per la ricezione del messaggio dal renderer: 0,100 messaggi di log utilizzando ChromeDriver e Chrome v80 tramite Selenium Java


39

Di recente abbiamo aggiornato il nostro ambiente di test con ChromeDriver v80.0.3987.16 e Chrome v80.0.3987.87 (build ufficiale) (64 bit) e dopo l'aggiornamento anche il programma minimo sta producendo molti di questi registri SEVERE:

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

In precedenza questi messaggi venivano osservati occasionalmente fino alla combinazione ChromeDriver v79.0 / Chrome v79.0.

Blocco di codice minimo:

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();
    }
}

Uscita console:

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

Qualcuno di fronte allo stesso? C'è stato qualche cambiamento in ChromeDriver / Chrome v80 rispetto a ChromeDriver / Chrome v79? Qualche indizio?


7
Sto affrontando anche lo stesso problema :(
Sooraj

6
Ricevo lo stesso problema dopo l'aggiornamento a v80. Tuttavia, la tua domanda dovrebbe probabilmente chiederti come risolverlo, piuttosto che chiederti se qualcun altro sta affrontando lo stesso problema.
Taplar

2
Non posso credere che questa domanda sia stata chiusa. Molte volte SO non riesce come motore per aiutare.
Saeed Neamati,

4
Di fronte allo stesso identico problema. Tutto il nostro codice di selenio automatizzato è rotto. E non possiamo effettuare il downgrade a causa di molte complessità.
Saeed Neamati,

2
@DebanjanB Sì, ho esaminato il tuo post. Spero che possano risolverlo nella prossima versione. Ho provato a scoprire la soluzione, quindi l'ho menzionata ma ci sono più opzioni per prevenire il timeout. Lo proverò con un'altra opzione, ma se la durata del timeout è molto inferiore, penso che dovremo aspettare la prossima versione.
Muzzamil,

Risposte:


24

Soluzione provvisoria

Ecco le soluzioni per diverse varianti degli utenti di Chrome .

  • Se si utilizza Chrome v80 , l'utilizzo del ChromeDriver 80.0.3987.106 rilasciato di recente risolve il problema.

    • Blocco di codice:

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

      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
      
  • Se stai utilizzando Chrome v81 , l'utilizzo del ChromeDriver recentemente rilasciato 81.0.4044.20 risolve il problema.

  • Se stai utilizzando Chrome dal canale Dev o Canary , devi selezionare i binari specifici della piattaforma:

Soluzione permanente

Tuttavia, ha @bugdroidinviato la correzione effettiva tramite questa revisione / commit, che è la seguente:

[ChromeDriver] elimina la registrazione del timeout del ciclo di tentativi : r1924789 ha aggiunto un ciclo di tentativi in ​​attesa di messaggi DevTools. Ciò ha spammato i registri degli utenti con rapporti di timeout non informativi. Questo CL elimina tali messaggi di log e riporta correttamente il valore di timeout del comando quando appropriato.

Nota :

  • Stato: fisso
  • Etichette: ToBeReleased ChromeDriver-82

Storia

Questo messaggio di errore ...

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

... non indica necessariamente un errore.

Come afferma @Tricia , ChromeDriver versione 80 ha modificato un ciclo di attesa per consentire ulteriori tentativi; questo ciclo genererà quel messaggio, ma continua ad ascoltare. Tuttavia, il tag SEVERE per quel messaggio è fuorviante.

Inoltre, nella discussione Numero 3332: Riprovare il timeout registrato come grave , @triciac [ChromeDriver Committer] ha anche aggiunto che il team ChromeDriver ha aggiunto un piccolo timeout (100 ms) DevToolsClientImpl::HandleEventsUntilper consentire un ulteriore controllo dello stato di navigazione. Ma sfortunatamente quando questo timeout stava scadendo, viene registrato come SEVERE (da ProcessNextMessage). Nel caso di questo piccolo timeout, non dovrebbe essere registrato come SEVERE , anche se i timeout SendCommandInternaldovrebbero comunque.

Quindi ChromeDriver ha bisogno di un modo per controllare la registrazione in modo migliore, possibilmente aumentando il timeout. Tuttavia, se il comando alla fine scade, la durata del timeout indicata è molto piccola, quindi è necessario elencare il timeout definito dall'utente.


Soluzione immediata

Come soluzione temporanea, puoi eseguire il downgrade a ChromeDriver v79.0.3945.36 poiché sembra che i registri SEVERE non vengano visualizzati nella console ma osserverai l' avvertenza :

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

che sembra una ... soluzione alternativa sicura ... ed è stato confermato da un membro del team di Chromium .

chromedriver79

  • Blocco di codice:

    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();
        }
    }
    
  • Uscita console:

    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

Puoi trovare un paio di discussioni rilevanti in:


1
Inoltre, tenere presente che questo messaggio di registro sembra essere scritto su stderror. Ho avuto uno script di PowerShell che non funzionava dopo aver eseguito i test usando vstest.console.exeperché la $?variabile di PowerShell era $falseanche se i test erano passati. PowerShell sembra pensare che qualsiasi cosa venga scritta su stderror sia un errore, anche se $LastExitCodeil test runner ha restituito zero.
Greg Burghardt,

4
Ri: Chrome v80, utilizzando ChromeDriver 80.0.3987.106 rilasciato di recente risolve il problema. Ri: Chrome v81, utilizzando ChromeDriver recentemente rilasciato 81.0.4044.20 risolve il problema. Riscontro ancora il problema con gli aggiornamenti di ChromeDirver.
Neil

1
Sì !!!!! ChromeDriver v79 win32 funziona correttamente con Chrome v80.0.3987.132 e non genera l'errore TimedOut nella console. Ma a volte Chromedriver non riesce ad avviare il server.
Surodip,

1
L'utilizzo della soluzione alternativa di chromedriver v79 non funziona più con l'ultima versione di Chrome stabile (81.0.4044.92) con il driver che non è nemmeno in grado di aprire Chrome. Ho aggiornato chromedriver alla versione più recente e funziona, ma sono tornati i gravi errori di timeout.
PST

@PST - esattamente gli stessi problemi. questo è frustrante.
Sriram Ilango,

10

Causa principale: ogni volta che si carica una pagina con l'aiuto del driver di selenio, lo driverscript attende fino al completo caricamento della pagina. Ma a volte il webdriver impiega più tempo a caricare la pagina, in tal caso vedrai TimeoutExceptionun'eccezione nella tua console.

Soluzione: quando il caricamento della pagina richiede troppo tempo ed è necessario interrompere il download di risorse secondarie aggiuntive (immagini, css, js ecc.), È possibile modificare pageLoadStrategy tramite il webdriver.

Sotto il codice basta caricare il contenuto html dalla pagina. Puoi impostare la strategia di caricamento della pagina da chromeoptions

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

Soluzione aggiornata -2: sono d'accordo con DebanjanB, la strategia PageLoad con None, senza scaricare file aggiuntivi (immagini, css, js ecc.) Non è una buona idea durante l'esecuzione dei test. Ho cercato tutti i problemi al riguardo e ho cercato di trovare una soluzione valida. Ho provato di seguito le opzioni in quanto a un certo punto è stato in grado di risolvere questo 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");

Nessuno di loro ha aiutato Ma ho trovato di nuovo una soluzione con la strategia di caricamento della pagina. Questa volta stiamo scaricando tutte le risorse secondarie ma stiamo aspettando l' evento DOMContentLoaded . Questa strategia chiamata Eager . Una piccola definizione di tutte e 3 le strategie di pageload disponibili

1. normale: questa strategia fa sì che Selenium attenda il caricamento della pagina intera (contenuto html e risorse secondarie scaricate e analizzate).

2. desideroso: questa strategia fa sì che Selenium attenda l'evento DOMContentLoaded (solo contenuto html scaricato e analizzato).

3. nessuno: questa strategia fa sì che Selenium ritorni immediatamente dopo che il contenuto della pagina iniziale è stato completamente ricevuto (contenuto html scaricato).

NOTA: per impostazione predefinita, quando Selenium carica una pagina, segue la normale paginaLoadStrategy.

Snippet di codice senza utilizzare la strategia Pageload (o normale come utilizzato dal selenio per impostazione predefinita)

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();

Uscita console:

Avvio di ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) sulla porta 41540 Sono consentite solo connessioni locali. Proteggi le porte utilizzate da ChromeDriver e i relativi framework di test per impedire l'accesso con codice dannoso. 11 febbraio 2020 10:22:12 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: dialetto rilevato: W3C [1581412933.937] [SEVERE]: Timeout ricezione messaggio dal renderer: 0.100 [1581412934.066] [SEVERE]: Timeout ricezione messaggio dal renderer: 0.100 [1581412934.168] [SEVERE]: timeout ricezione messaggio dal renderer: 0.100 [1581412934.360] [SEVERE]: timeout ricezione messaggio dal renderer: 0.100 [1581412934.461] [SEVERE]: timeout ricezione messaggio dal renderer: 0.100 [1581412934.618] [SEVERE]:

Con PageLoad Strategy - Desideroso:

Snippet di codice:

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();

Uscita console:

Avvio di ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) sulla porta 1175 Sono consentite solo connessioni locali. Proteggi le porte utilizzate da ChromeDriver e i relativi framework di test per impedire l'accesso con codice dannoso. 11 febbraio 2020 10:29:05 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: dialetto rilevato: W3C
21


Generalmente non sarai in grado di modificare la strategia di PageLoad poiché le configurazioni di WebDriver sono standardizzate e si adattano meglio alla strategia di test richiesta. Tuttavia, nelle discussioni su come fare in modo che Selenium non aspetti il ​​caricamento della pagina intera , non aspettare il caricamento di una pagina, ne abbiamo discusso in dettaglio. È un problema con ChromeDriver v80.
DebanjanB

2
@DebanjanB Sono d'accordo con te ma come sai SO è la community che sta per risolvere i problemi. Ho provato la migliore soluzione possibile. Se sai che è ISSUE o BUG nel driver di Chrome, allora dobbiamo registrare questo problema sul loro progetto Git o sul posto consigliato. Sollevare domande in SO non aiuterà.
Muzzamil,

Di recente ho aggiornato il mio chrome e chromedriver e poi ho iniziato a ricevere tutti questi messaggi di avviso. Ora sto cercando di eseguire il downgrade del mio Chrome e non riesco a trovare dove trovare il Chrome 79v. Qualcuno può fornirmi il link per scaricare Chrome 79v
Vin

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.