Expiration du délai de réception des messages du moteur de rendu: 0,100 messages de journal à l'aide de ChromeDriver et Chrome v80 via Selenium Java

39

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?

DebanjanB
la source
7
Je suis également confronté au même problème :(
Sooraj
6
J'obtiens le même problème une fois que nous sommes passés à la v80. Cependant, votre question devrait probablement demander comment y remédier, plutôt que de demander si quelqu'un d'autre est confronté au même problème.
Taplar
2
Je ne peux pas croire que cette question a été fermée. Plusieurs fois, SO échoue comme moteur pour aider.
Saeed Neamati
4
Face exactement au même problème. Tout notre code Selenium automatisé est cassé. Et nous ne pouvons pas rétrograder à cause de beaucoup de complexités.
Saeed Neamati
2
@DebanjanB Oui, j'ai parcouru votre message. J'espère qu'ils pourront le corriger dans la prochaine version. J'ai essayé de trouver la solution donc je l'ai mentionnée mais il y a plus d'options pour empêcher le timeout. Je vais l'essayer avec une autre option mais si la durée du timeout est très inférieure, je pense que nous devons attendre la prochaine version.
Muzzamil

Réponses:

24

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:

      System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
      WebDriver driver =  new ChromeDriver();
      driver.quit();
      
    • Sortie 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
      
  • Si vous utilisez Chrome v81 , l'utilisation du ChromeDriver 81.0.4044.20 récemment publié résout le problème.

  • Si vous utilisez Chrome à partir du canal Dev ou Canary , vous devez récupérer les fichiers binaires spécifiques à la plate-forme:

Solution permanente

Cependant, vous @bugdroidavez soumis le correctif réel via cette révision / validation, comme suit:

[ChromeDriver] supprime la journalisation du délai d'expiration de la boucle de relance : r1924789 a ajouté une boucle de relance en attendant les messages DevTools. Cela a spammé les journaux des utilisateurs avec des rapports de délai d'attente non informatifs. Ce CL supprime ces messages de journal et signale correctement la valeur de délai d'expiration de la commande, le cas échéant.

Remarque :

  • Statut: fixe
  • Étiquettes: ToBeReleased ChromeDriver-82

Histoire

Ce message d'erreur ...

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

... 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::HandleEventsUntilpour 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 (par ProcessNextMessage). 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 de SendCommandInternaldevraient 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 :

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

ce qui ressemble à une solution de contournement sûre ... et avait été confirmé par un membre de l'équipe Chromium .

chromedriver79

  • Bloc de code:

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

Vous pouvez trouver quelques discussions pertinentes dans:

DebanjanB
la source
1
Sachez également que ce message de journal semble être écrit dans stderror. J'ai eu un démarrage de script PowerShell échouant après l'exécution de tests à l'aide de vstest.console.exela $?variable PowerShell , $falsemême si les tests avaient réussi. PowerShell semble penser que tout ce qui est écrit dans stderror est un échec, même si $LastExitCodele testeur a renvoyé zéro.
Greg Burghardt
4
Re: Chrome v80, en utilisant le ChromeDriver 80.0.3987.106 récemment publié résout le problème. Re: Chrome v81, en utilisant le ChromeDriver 81.0.4044.20 récemment publié résout le problème. Je vois toujours le problème avec les mises à jour de ChromeDirver.
Neil
1
Oui !!!!! ChromeDriver v79 win32 fonctionne très bien avec chrome v80.0.3987.132 et ne donne pas d'erreur TimedOut dans la console. Mais parfois, Chromedriver ne parvient pas à démarrer le serveur.
Surodip
1
L'utilisation de la solution de contournement de chromedriver v79 ne fonctionne plus avec la dernière version du chrome stable (81.0.4044.92), le pilote ne pouvant même pas ouvrir le chrome. J'ai mis à jour chromedriver vers la dernière version et cela fonctionne, mais les graves erreurs de timeout sont de retour.
PST
@PST - exactement les mêmes problèmes. C'est frustrant.
Sriram Ilango
10

Cause principale: chaque fois que vous chargez une page à l'aide du pilote sélénium, le driverscript 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 une TimeoutExceptionexception 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

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

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.

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

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)

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

Sortie console:

Démarrage de ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) sur le port 41540 Seules les connexions locales sont autorisées. Veuillez protéger les ports utilisés par ChromeDriver et les cadres de test associés pour empêcher l'accès par du code malveillant. 11 février 2020 10:22:12 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: dialecte détecté: W3C [1581412933.937] [SEVERE]: délai dépassé pour la réception du message du moteur de rendu: 0.100 [1581412934.066] [SEVERE]: délai dépassé réception d'un message du rendu: 0,100 [1581412934.168] [SÉVÈRE]: Délai de réception du message du rendu: 0,100 [1581412934.360] [SÉVÈRE]: Délai de réception du message du rendu: 0,100 [1581412934.461] [SÉVÈRE]: Délai de réception du message du rendu: 0,100 [1581412934.618] [GRAVE]:

Avec la stratégie PageLoad - Désireux:

Extrait de code:

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

Sortie console:

Démarrage de ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) sur le port 1175 Seules les connexions locales sont autorisées. Veuillez protéger les ports utilisés par ChromeDriver et les cadres de test associés pour empêcher l'accès par du code malveillant. 11 février 2020 10:29:05 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: dialecte détecté: W3C
21

Muzzamil
la source
En règle générale, vous ne pourrez pas modifier la stratégie PageLoad car les configurations WebDriver sont standardisées et correspondent le mieux à la stratégie de test requise. Cependant, dans les discussions Comment faire pour que Selenium n'attende pas le chargement de la page complète , N'attendez pas qu'une page se charge, nous en avons discuté en détail. C'est un problème avec ChromeDriver v80.
DebanjanB
2
@DebanjanB Je suis d'accord avec vous mais comme vous le savez, SO est la communauté sur le point de résoudre les problèmes. J'ai essayé la meilleure solution possible. Si vous savez qu'il s'agit d'un problème ou d'un bug dans le pilote Chrome, nous devons enregistrer ce problème sur leur projet Git ou l'emplacement recommandé. Poser une question dans SO n'aidera pas.
Muzzamil
J'ai récemment mis à jour mon chrome et mon chromedriver, puis j'ai commencé à recevoir tous ces messages d'avertissement. Maintenant, j'essaie de rétrograder mon chrome et je ne trouve pas où obtenir le chrome 79v. Quelqu'un peut-il me fournir le lien pour télécharger le chrome 79v
Vin
@Vin ici, vous pouvez télécharger chromedriver.chromium.org/downloads
Muzzamil