Zeitüberschreitung beim Empfang von Nachrichten vom Renderer: 0,100 Protokollnachrichten mit ChromeDriver und Chrome v80 über Selenium Java

39

Wir haben kürzlich unsere Testumgebung mit ChromeDriver v80.0.3987.16 und Chrome v80.0.3987.87 (Official Build) (64-Bit) aktualisiert. Nach dem Upgrade erstellt sogar das Minimalprogramm viele dieser SEVERE-Protokolle:

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

Früher wurden diese Meldungen gelegentlich bis zur Kombination ChromeDriver v79.0 / Chrome v79.0 beobachtet.

Minimaler Codeblock:

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

Konsolenausgabe:

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

Steht jemand vor dem gleichen? Gab es Änderungen in ChromeDriver / Chrome v80 in Bezug auf ChromeDriver / Chrome v79? Irgendwelche Hinweise?

DebanjanB
quelle
7
Ich stehe auch vor dem gleichen Problem :(
Sooraj
6
Ich bekomme das gleiche Problem, sobald wir auf v80 aktualisiert haben. Ihre Frage sollte jedoch wahrscheinlich die Frage stellen, wie das Problem behoben werden kann, anstatt zu fragen, ob jemand anderes mit demselben Problem konfrontiert ist.
Taplar
2
Ich kann nicht glauben, dass diese Frage geschlossen wurde. Oft scheitert SO als Motor zu helfen.
Saeed Neamati
4
Vor genau dem gleichen Problem. Unser gesamter automatisierter Selenium-Code ist defekt. Und wir können wegen vieler Komplexitäten kein Downgrade durchführen.
Saeed Neamati
2
@DebanjanB Ja, ich habe Ihren Beitrag durchgesehen. Ich hoffe, dass sie es in der nächsten Version beheben können. Ich habe versucht, die Lösung herauszufinden, deshalb habe ich sie erwähnt, aber es gibt mehr Optionen, um Zeitüberschreitungen zu vermeiden. Ich werde es mit einer anderen Option versuchen, aber wenn die Timeout-Dauer sehr viel kürzer ist, müssen wir wahrscheinlich auf die nächste Version warten.
Muzzamil

Antworten:

24

Zwischenlösung

Hier sind die Lösungen für verschiedene Varianten von Chrome- Nutzern.

  • Wenn Sie Chrome v80 verwenden , wird das Problem durch die Verwendung des kürzlich veröffentlichten ChromeDriver 80.0.3987.106 behoben .

    • Codeblock:

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

      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
      
  • Wenn Sie Chrome v81 verwenden , wird das Problem durch die Verwendung des kürzlich veröffentlichten ChromeDriver 81.0.4044.20 behoben .

  • Wenn Sie Chrome vom Dev- oder Canary- Kanal verwenden, müssen Sie die plattformspezifischen Binärdateien abrufen:

Permanente Lösung

Allerdings @bugdroidreichte die tatsächlichen fix durch diese Revision / verpflichten , die wie folgt lautet:

[ChromeDriver] unterdrückt die Protokollierung des Zeitlimits für Wiederholungsschleifen : r1924789 hat eine Wiederholungsschleife hinzugefügt, während auf DevTools-Nachrichten gewartet wurde. Dadurch wurden die Protokolle der Benutzer mit nicht informativen Zeitüberschreitungsberichten gespammt. Dieser CL unterdrückt diese Protokollnachrichten und meldet den Wert für das Befehlszeitlimit gegebenenfalls korrekt.

Hinweis :

  • Status: Behoben
  • Beschriftungen: ToBeReleased ChromeDriver-82

Geschichte

Diese Fehlermeldung ...

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

... weist nicht unbedingt auf einen Fehler hin.

Wie @Tricia erwähnt , hat ChromeDriver Version 80 eine Warteschleife geändert, um weitere Wiederholungsversuche zu ermöglichen. Diese Schleife generiert diese Nachricht, hört aber weiterhin zu. Das SEVERE- Tag für diese Nachricht ist jedoch irreführend.

Ferner wird in der Diskussion Ausgabe 3332: Retry Timeout so streng protokollierte , @triciac [ChromeDriver Committer] auch hinzugefügt , dass ein kleines Timeout (100 ms) ChromeDriver Team hinzugefügt DevToolsClientImpl::HandleEventsUntilzusätzliche Überprüfung des Navigationsstatus zu ermöglichen. Leider wurde diese Zeitüberschreitung nach Ablauf dieser Zeit als SEVERE (von ProcessNextMessage) protokolliert . Im Fall dieses kleinen Timeouts sollte es nicht als SEVERE protokolliert werden , obwohl Timeouts von SendCommandInternalnoch sollten.

ChromeDriver benötigt daher eine Möglichkeit, die Protokollierung besser zu steuern, möglicherweise durch Erhöhen des Zeitlimits. Wenn der Befehl jedoch eine Zeitüberschreitung aufweist und die angegebene Zeitüberschreitungsdauer sehr gering ist, muss stattdessen die benutzerdefinierte Zeitüberschreitung aufgelistet werden.


Sofortige Lösung

Als Zwischenlösung können Sie herabzustufen ChromeDriver v79.0.3945.36 , wie es die scheint SCHWERE Protokolle in der Konsole nicht auftaucht , aber Sie werden die beobachten WARNUNG :

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

das klingt nach einer ... sicheren Problemumgehung ... und wurde von einem Chromium- Teammitglied bestätigt .

chromedriver79

  • Codeblock:

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

    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

Einige relevante Diskussionen finden Sie in:

DebanjanB
quelle
1
Beachten Sie auch, dass diese Protokollnachricht anscheinend in stderror geschrieben ist. Nach dem Ausführen von Tests mit konnte ein PowerShell-Skript fehlschlagen, vstest.console.exeda die PowerShell- $?Variable $falsetrotz bestandener Tests vorhanden war. PowerShell scheint zu glauben, dass alles, was in stderror geschrieben wird, ein Fehler ist, obwohl der $LastExitCodefür den Testläufer Null zurückgegeben hat.
Greg Burghardt
4
Betreff: Chrome v80 mit dem kürzlich veröffentlichten ChromeDriver 80.0.3987.106 löst das Problem. Betreff: Chrome v81 mit dem kürzlich veröffentlichten ChromeDriver 81.0.4044.20 löst das Problem. Ich sehe immer noch das Problem mit den ChromeDirver-Updates.
Neil
1
Ja !!!!! ChromeDriver v79 win32 funktioniert einwandfrei mit Chrome v80.0.3987.132 und gibt keinen TimedOut-Fehler in der Konsole aus. Manchmal kann Chromedriver den Server jedoch nicht starten.
Surodip
1
Die Problemumgehung mit chromedriver v79 funktioniert nicht mehr mit der neuesten Version von Stable Chrome (81.0.4044.92), da der Treiber Chrome nicht einmal öffnen kann. Ich habe den Chromedriver auf den neuesten Stand gebracht und es funktioniert, aber die schwerwiegenden Timeout-Fehler sind zurückgekehrt.
PST
@PST - genau die gleichen Probleme. das ist frustrierend.
Sriram Ilango
10

Grundursache: Wenn Sie eine Seite mit Hilfe des Selentreibers laden, driverwarten Sie mit dem Skript, bis die Seite vollständig geladen ist. Manchmal benötigt der Webtreiber jedoch mehr Zeit zum Laden der Seite. In diesem Fall wird TimeoutExceptionin Ihrer Konsole eine Ausnahme angezeigt .

Lösung: Wenn das Laden von Seiten zu lange dauert und Sie das Herunterladen zusätzlicher Unterressourcen (Bilder, CSS, JS usw.) beenden müssen , können Sie die pageLoadStrategy über den Webdriver ändern.

Unter dem Code laden Sie einfach den HTML-Inhalt von der Seite. Sie können die Strategie zum Laden von Seiten über Chrome-Optionen festlegen

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

Aktualisierte Lösung -2: Ich bin mit DebanjanB einverstanden, PageLoad-Strategie mit None, ohne zusätzliche Dateien (Bilder, CSS, JS usw.) herunterzuladen, ist beim Durchführen von Tests keine gute Idee. Ich habe alle Probleme damit durchsucht und versucht, eine gültige Lösung zu finden. Ich habe die folgenden Optionen ausprobiert, da es irgendwann möglich war, dieses Problem zu beheben.

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

Keiner von ihnen half. Aber ich fand wieder eine Lösung mit der Strategie zum Laden von Seiten. Dieses Mal laden wir alle Unterressourcen herunter, warten aber auf das DOMContentLoaded- Ereignis. Diese Strategie heißt Eager . Eine kleine Definition aller 3 verfügbaren Seitenladestrategien

1. normal: Diese Strategie bewirkt, dass Selenium auf das Laden der gesamten Seite wartet (heruntergeladene und analysierte HTML-Inhalte und Unterressourcen).

2. eifrig: Diese Strategie veranlasst Selenium, auf das DOMContentLoaded-Ereignis zu warten (nur heruntergeladene und analysierte HTML-Inhalte).

3. keine: Diese Strategie bewirkt, dass Selen sofort zurückkehrt, nachdem der ursprüngliche Seiteninhalt vollständig empfangen wurde (heruntergeladener HTML-Inhalt).

HINWEIS: Wenn Selenium eine Seite lädt, folgt es standardmäßig der normalen pageLoadStrategy.

Code-Snippet ohne Pageload-Strategie (oder Normal, wie standardmäßig von Selen verwendet)

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

Konsolenausgabe:

Starten von ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-Heads / 3987 @ {# 185}) an Port 41540 Nur lokale Verbindungen sind zulässig. Bitte schützen Sie die von ChromeDriver und verwandten Testframeworks verwendeten Ports, um den Zugriff durch schädlichen Code zu verhindern. 11. Februar 2020, 10:22:12 Uhr org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Erkannter Dialekt: W3C [1581412933.937] [SEVERE]: Zeitüberschreitung beim Empfang der Nachricht vom Renderer: 0.100 [1581412934.066] [SEVERE]: Zeitüberschreitung Empfangen einer Nachricht vom Renderer: 0.100 [1581412934.168] [SEVERE]: Zeitüberschreitung beim Empfang der Nachricht vom Renderer: 0.100 [1581412934.360] [SEVERE]: Zeitüberschreitung beim Empfang der Nachricht vom Renderer: 0.100 [1581412934.461] [SEVERE]: Zeitüberschreitung beim Empfang der Nachricht vom Renderer: 0,100 [1581412934.618] [SEVERE]:

Mit PageLoad-Strategie - Eifrig:

Code-Auszug:

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

Konsolenausgabe:

Starten von ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-Heads / 3987 @ {# 185}) auf Port 1175 Nur lokale Verbindungen sind zulässig. Bitte schützen Sie die von ChromeDriver und verwandten Testframeworks verwendeten Ports, um den Zugriff durch schädlichen Code zu verhindern. 11. Februar 2020, 10:29:05 Uhr org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Erkannter Dialekt: W3C
21

Muzzamil
quelle
Im Allgemeinen können Sie die PageLoad-Strategie nicht optimieren, da die WebDriver-Konfigurationen standardisiert sind und am besten zur erforderlichen Teststrategie passen. In den Diskussionen, wie Selenium nicht bis zum Laden der ganzen Seite warten soll , warten Sie nicht auf das Laden einer Seite. Wir haben dies ausführlich besprochen. Es ist ein Problem mit ChromeDriver v80.
DebanjanB
2
@DebanjanB Ich stimme Ihnen zu, aber wie Sie wissen, ist SO die Community im Begriff, Probleme zu lösen. Ich habe versucht, die bestmögliche Lösung zu finden. Wenn Sie wissen, dass es sich um ein Problem oder einen Fehler im Chrome-Treiber handelt, müssen wir dieses Problem in ihrem Git-Projekt oder an dem empfohlenen Ort protokollieren. Fragen in SO zu stellen wird nicht helfen.
Muzzamil
Ich habe kürzlich mein Chrome und meinen Chromedriver aktualisiert und dann alle diese Warnmeldungen erhalten. Jetzt versuche ich, mein Chrom herunterzustufen und kann nicht finden, wo ich das Chrom 79v bekommen kann. Kann mir jemand den Link zum Herunterladen von Chrome 79v
Vin
@Vin hier können Sie chromedriver.chromium.org/downloads
Muzzamil