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?
Antworten:
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:
Konsolenausgabe:
Wenn Sie Chrome v81 verwenden , wird das Problem durch die Verwendung des kürzlich veröffentlichten ChromeDriver 81.0.4044.20 behoben .
Permanente Lösung
Allerdings
@bugdroid
reichte die tatsächlichen fix durch diese Revision / verpflichten , die wie folgt lautet:Hinweis :
Geschichte
Diese Fehlermeldung ...
... 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::HandleEventsUntil
zusätzliche Überprüfung des Navigationsstatus zu ermöglichen. Leider wurde diese Zeitüberschreitung nach Ablauf dieser Zeit als SEVERE (vonProcessNextMessage
) protokolliert . Im Fall dieses kleinen Timeouts sollte es nicht als SEVERE protokolliert werden , obwohl Timeouts vonSendCommandInternal
noch 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 :
das klingt nach einer ... sicheren Problemumgehung ... und wurde von einem Chromium- Teammitglied bestätigt .
Codeblock:
Konsolenausgabe:
tl; DR
Einige relevante Diskussionen finden Sie in:
quelle
vstest.console.exe
da die PowerShell-$?
Variable$false
trotz bestandener Tests vorhanden war. PowerShell scheint zu glauben, dass alles, was in stderror geschrieben wird, ein Fehler ist, obwohl der$LastExitCode
für den Testläufer Null zurückgegeben hat.Grundursache: Wenn Sie eine Seite mit Hilfe des Selentreibers laden,
driver
warten 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 wirdTimeoutException
in 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
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.
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)
Konsolenausgabe:
Mit PageLoad-Strategie - Eifrig:
Code-Auszug:
Konsolenausgabe:
quelle