web-dev-qa-db-fra.com

Selenium Expiration du délai de réception du message du moteur de rendu

Après Chrome a publié sa dernière version hier (64.0.3282), je reçois maintenant cette erreur assez sporadiquement:

Délai de réception du message du moteur de rendu dépassé: 600 000

J'effectue environ 2 000 tests Selenium dans un conteneur Docker et je vois cet échec à un taux d'environ 1 pour 100. Il n'y a pas d'étape reproductible pour autant que je sache, les tests qui échouent sont différents à chaque itération. J'ai mis à jour la dernière version de Chromedriver (2.35), mais cela ne semble pas avoir d'effet. J'utilisais auparavant Selenium 2.41, mais j'ai mis à jour la dernière version (3.8.1) en espérant que cela pourrait aider ... ce n'est pas le cas. Je ne comprends absolument pas pourquoi cela pourrait se produire. Quelqu'un a-t-il remarqué cela? Est-ce éventuellement un bug avec la dernière version de Chrome?

Merci d’avance pour toute aide que vous pourrez peut-être fournir.

18
Brandon Schabell

Gros AJAX charges

Commencez par vérifier que vous ne téléchargez pas, ne traitez pas et n'évaluez pas beaucoup de javascript. Cela peut provoquer un délai d'attente.

Compatibilité de version

Tout d’abord, vérifiez vos versions de:

  • Sélénium
  • JDK
  • ChromeDriver
  • Chrome

    sont tous compatibles. Bonne chance dans cette démarche car il n’existe pas de lieu unique pour la documenter ET le logiciel Selenium n’est pas assez intelligent pour effectuer une vérification rapide (cela devrait)

Ajouter à la liste sans cesse croissante d'arguments inutiles

Ajouter ce bloc de code crypté

à jour de tous les problèmes jamais signalés concernant un débordement de pile le: septembre 2018

        // ChromeDriver is just AWFUL because every version or two it breaks unless you pass cryptic arguments
        //AGRESSIVE: options.setPageLoadStrategy(PageLoadStrategy.NONE); // https://www.skptricks.com/2018/08/timed-out-receiving-message-from-renderer-Selenium.html
        options.addArguments("start-maximized"); // https://stackoverflow.com/a/26283818/1689770
        options.addArguments("enable-automation"); // https://stackoverflow.com/a/43840128/1689770
        options.addArguments("--headless"); // only if you are ACTUALLY running headless
        options.addArguments("--no-sandbox"); //https://stackoverflow.com/a/50725918/1689770
        options.addArguments("--disable-infobars"); //https://stackoverflow.com/a/43840128/1689770
        options.addArguments("--disable-dev-shm-usage"); //https://stackoverflow.com/a/50725918/1689770
        options.addArguments("--disable-browser-side-navigation"); //https://stackoverflow.com/a/49123152/1689770
        options.addArguments("--disable-gpu"); //https://stackoverflow.com/questions/51959986/how-to-solve-Selenium-chromedriver-timed-out-receiving-message-from-renderer-exc
        driver = new ChromeDriver(options);

Sources:

32
Jonathan

Il semble qu'il y ait eu un problème avec la version la plus récente Chrome). Sans le jeu disable-gpu Chromeoption, le rendu expirera de temps en temps. La solution de contournement jusqu'à ce que Google corrige ce problème (le cas échéant) ) consiste à ajouter l'attribut --disable-gpu à ChromeOptions.

EDIT: Cela a réduit la fréquence des occurrences, mais cela se produit toujours.

5
Brandon Schabell

J'ai eu ce problème aujourd'hui, avec Chrome: Version 73.0.3683.86 (Official Build) (64 bits). Pour moi, les échecs de génération Jenkins échouaient, et tout se passait bien localement. Voir les options suivantes Chrome qui m’a aidé à surmonter ce problème (ChromeDriver à l’heure actuelle: version - 73.0.3683.68) :

ChromeOptions options = new ChromeOptions();
options.addArguments("enable-automation");
options.addArguments("--headless");
options.addArguments("--window-size=1920,1080");
options.addArguments("--no-sandbox");
options.addArguments("--disable-extensions");
options.addArguments("--dns-prefetch-disable");
options.addArguments("--disable-gpu");
options.setPageLoadStrategy(PageLoadStrategy.NORMAL);
4
Alex Podimov

J'ai rencontré le même problème lors du déclenchement de l'exécution de Jenkins. J'ai joué un peu et j'ai constaté que le fait d'ajouter uniquement l'élément ci-dessous chrome) permet de faire fonctionner les choses:

options.addArguments("--no-sandbox");
2
Soumya

Je voyais des problèmes allant de Chrome 72 à 73 et recevait le message d'erreur suivant:

Timed out receiving message from renderer: 600.000

J'avais eu l'erreur seulement quand j'exécutais des tests sur Jenkins (les tests s'exécutaient bien sur ma machine de développement local), ce que j'ai trouvé plutôt étrange.

J'ai essayé Firefox et aucun problème n'a été trouvé, donc cela a été réduit à Chrome. Après avoir jeté un œil au traqueur de problèmes de chrome, j'ai trouvé Problème 946441: Chromedriver: le délai de réception du message d'erreur de rendu est expiré pour Selenium + Chrome + Jenkins (utilisateur SYSTEM)

Comme il s’agissait d’un problème de rendu, j’ai essayé d’exécuter des tests en mode sans tête, ce qui a résolu le problème.

2
jrc16

Si votre site Web est https et que vous rencontrez des problèmes avec chromedriver en raison d’un problème de temporisation, utilisez

option.addArguments("enable-features=NetworkServiceInProcess")

Si ce qui précède ne fonctionne pas, utilisez

option.addArguments("disable-features=NetworkService") 

au lieu

Le crédit va à https://groups.google.com/forum/#!topic/chromedriver-users/yHuW_Z7tdy

1
Bhuvanesh Mani

Je voyais le Timed out receiving message from renderer: alias Net::ReadTimeout _ émettez 100% du temps dans un test Cucumber exécuté dans une version de Jenkins après que l'image du docker Selenium/standalone-chrome a été mise à jour à la fin janvier 2018. L'ajout de l'attribut --disable-gpu à ChromeOptions ne l'a pas corrigé. moi, mais en ajoutant le --disable-browser-side-navigation option fixée à 100%. J'ai trouvé cette recommandation ici: https://bugs.chromium.org/p/chromedriver/issues/detail?id=2239#c1

il a dit qu'il existe plusieurs solutions de contournement à ce problème:

  • Un correctif est présent dans Chrome v65, actuellement disponible en version bêta. C’est la meilleure option si vous pouvez utiliser les versions bêta.

  • Ajoutez le commutateur --disable-browser-side-navigation à la ligne de commande Chrome.

  • Utilisez ChromeDriver 2.33, qui utilise automatiquement --disable-browser-browser-side-navigation.

0
dansalmo

Dans notre cas, nous avons constaté que le problème était un problème de performances, car la capture d'écran était énorme, mais nous avons pris conscience de la résolution des captures d'écran créées par Chrome était le double du code spécifié dans en appelant le chromedriver, par exemple, si nous spécifions la largeur 1024px et la hauteur 2000px dans la capture d'écran, une image de 2048px width et 4000px height était créée. le processus terminé (après une longue attente), il créait une lourde capture d'écran. Nous avons découvert qu'il s'agissait d'une option (problème) de Chrome) pour la prise en charge de périphériques Retina qui augmentent la résolution de la capture d'écran. nous avons forcé l'utilisation d'un drapeau pour désactiver l'option et restituer la résolution d'origine configurée; cela fonctionne bien, la création de la capture d'écran prend entre 8 et 13 secondes (selon le contenu de la page) et la taille de l'image est inférieure à celle du début. . Cette est le drapeau dans l'objet ChromeOptions:

options.addArguments("--force-device-scale-factor=1");
0
highsoftx980

Je connais la question à propos de Chromedriver, mais pour tous ceux comme moi qui ne testent pas spécifiquement sur Chrome et ont simplement besoin d’un navigateur sans tête fonctionnel dans Selenium : passez à Firefox ( Geckodriver ). J'ai défini une seule option et j'ai tout oublié de ces bugs et problèmes de rendu de Chromedriver:

from Selenium.webdriver.firefox.options import Options
options = Options()
options.headless = True
browser = webdriver.Firefox(options=options)

Cela fonctionne juste (tm).

0
kontextify