Nous avons récemment mis à niveau notre environnement de test avec ChromeDriver v80.0.3987.16 et Chrome v80.0.3987.87 (version officielle) (64 bits) et après la mise à niveau, même le programme minimal produit de nombreux journaux SEVERE:
[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100
Auparavant, ces messages ont été observés occasionnellement jusqu'à avec la combinaison ChromeDriver v79.0 / Chrome v79.0.
Bloc de code minimal:
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();
}
}
Sortie 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
Quelqu'un face à la même chose? Y a-t-il eu des changements dans ChromeDriver / Chrome v80 par rapport à ChromeDriver / Chrome v79? Des indices?
Réponses:
Solution provisoire
Voici les solutions pour différentes variantes d' utilisateurs de Chrome .
Si vous utilisez Chrome v80 , l'utilisation du ChromeDriver 80.0.3987.106 récemment publié résout le problème.
Bloc de code:
Sortie console:
Si vous utilisez Chrome v81 , l'utilisation du ChromeDriver 81.0.4044.20 récemment publié résout le problème.
Solution permanente
Cependant, vous
@bugdroid
avez soumis le correctif réel via cette révision / validation, comme suit:Remarque :
Histoire
Ce message d'erreur ...
... n'indique pas nécessairement un échec.
Comme @Tricia le mentionne , ChromeDriver version 80 a modifié une boucle d'attente pour autoriser davantage de tentatives; cette boucle va générer ce message, mais elle continue à écouter. Cependant, la balise SEVERE de ce message est trompeuse.
De plus, dans la discussion Problème 3332: Délai d'attente avant nouvelle tentative enregistré comme grave , @triciac [ChromeDriver Committer] a également ajouté que l'équipe ChromeDriver a ajouté un petit délai d'attente (100 ms)
DevToolsClientImpl::HandleEventsUntil
pour permettre une vérification supplémentaire de l'état de navigation. Mais, malheureusement, lorsque ce délai expirait, il est enregistré comme SÉVÈRE (parProcessNextMessage
). Dans le cas de ce petit délai d'expiration, il ne doit pas se connecter en tant que SÉVÈRE , bien que les délais d'expiration deSendCommandInternal
devraient toujours.ChromeDriver a donc besoin d'un moyen de mieux contrôler la journalisation, éventuellement en augmentant le délai d'expiration. Cependant, si la commande arrive finalement à expiration , le délai d'expiration indiqué étant très petit, il est nécessaire de répertorier le délai d'expiration défini par l'utilisateur à la place.
Solution immédiate
En tant que solution provisoire, vous pouvez rétrograder vers ChromeDriver v79.0.3945.36 car il semble que les journaux SEVERE n'apparaissent pas dans la console, mais vous observerez l' AVERTISSEMENT :
ce qui ressemble à une solution de contournement sûre ... et avait été confirmé par un membre de l'équipe Chromium .
Bloc de code:
Sortie console:
tl; dr
Vous pouvez trouver quelques discussions pertinentes dans:
la source
vstest.console.exe
la$?
variable PowerShell ,$false
même si les tests avaient réussi. PowerShell semble penser que tout ce qui est écrit dans stderror est un échec, même si$LastExitCode
le testeur a renvoyé zéro.Cause principale: chaque fois que vous chargez une page à l'aide du pilote sélénium, le
driver
script attend que la page soit complètement chargée. Mais parfois, le pilote Web prend plus de temps pour charger la page, dans ce cas, vous verrez uneTimeoutException
exception dans votre console.Solution: lorsque le chargement de la page prend trop de temps et que vous devez arrêter de télécharger des sous-ressources supplémentaires (images, css, js, etc.), vous pouvez modifier la pageLoadStrategy via le pilote Web.
Sous le code, chargez simplement le contenu html de la page. Vous pouvez définir une stratégie de chargement de page à partir de chromeoptions
Solution mise à jour -2: Je suis d'accord avec DebanjanB, la stratégie PageLoad avec None, sans télécharger des fichiers supplémentaires (images, css, js, etc.) n'est pas une bonne idée lors des tests. J'ai cherché tous les problèmes à ce sujet et j'ai essayé de trouver une solution valide. J'ai essayé les options ci-dessous car à un moment donné, il a pu résoudre ce problème.
Aucun d'eux n'a aidé Mais j'ai trouvé une solution avec la stratégie de chargement de page. Cette fois, nous téléchargeons toutes les sous-ressources, mais nous attendons l' événement DOMContentLoaded . Cette stratégie appelée Eager . Une petite définition des 3 stratégies de chargement de page disponibles
1. normal: cette stratégie oblige Selenium à attendre le chargement complet de la page (contenu html et sous-ressources téléchargées et analysées).
2. impatient: cette stratégie oblige Selenium à attendre l'événement DOMContentLoaded (contenu html téléchargé et analysé uniquement).
3. aucun: cette stratégie entraîne le retour de Selenium immédiatement après la réception complète du contenu de la page initiale (contenu html téléchargé).
REMARQUE: Par défaut, lorsque Selenium charge une page, il suit la pageLoadStrategy normale.
Extrait de code sans utiliser la stratégie Pageload (Ou Normal tel qu'utilisé par sélénium par défaut)
Sortie console:
Avec la stratégie PageLoad - Désireux:
Extrait de code:
Sortie console:
la source