web-dev-qa-db-fra.com

Problème possible avec Chromedriver 78, Selenium ne peut pas trouver l'élément Web de PDF ouvert dans Chrome

Jusqu'à ce que mon google Chrome ne soit pas mis à jour vers la version 78, mon code fonctionnait bien. J'ai également mis à jour le chromedriver vers la version 78.0.3904.70. Je ne suis donc plus en mesure de trouver WebElement avec le plugin id = ' 'en utilisant Selenium WebDriver et Java:

<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&amp;reanudar=&amp;>
</div>
</html>

À part cette partie, mes tests fonctionnent bien. Je n'ai jamais eu de problème similaire auparavant. J'ai également essayé de trouver WebElement id = 'content' mais je reçois la même erreur.

WebDriverWait wait = new WebDriverWait (driver, 90);
WebElement scrollvalid = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("plugin")));

scrollvalid.sendKeys(Keys.PAGE_DOWN);                       scrollvalid.sendKeys(Keys.PAGE_DOWN);

Mon script d'automatisation devrait trouver l'élément PDF et faire défiler la page vers le bas. Au lieu de cela, je reçois cette erreur: org.openqa.Selenium.TimeoutException: expiration après 90 secondes d'attente pour la visibilité de l'élément situé par By.id: plugin

Quelqu'un est-il confronté à un problème similaire? Merci d'avance.

17
Mix

J'ai rencontré le même problème.

Apparemment Chrome se met automatiquement à jour. Hier (29 octobre 19) Mon ChromeDriver a commencé à se plaindre qu'il n'était pas compatible avec Chrome 78. J'ai mis à jour le pilote vers le Version 78. J'ai commencé à obtenir des exceptions org.openqa.Selenium.NoSuchElementException aléatoires lorsque j'essayais de trouver des éléments que j'avais confirmés. Les findElement [s] fonctionnent également lorsque j'utilisais des points d'arrêt. J'ai également essayé des attentes implicites, avec un succès limité.

J'ai essayé la solution ChromeOption de zsbappa mais pas de joie.

Google rend difficile l'obtention d'anciennes versions de Chrome, mais j'ai trouvé la version 76 sur https://www.neowin.net/news/google-chrome-76-offline-installer/ . Attention, le programme d'installation en ligne installe la dernière version. Je suis revenu au pilote pour 76 et tout va bien. Tous mes tests Selenium fonctionnent à nouveau.

Ma conclusion est que le Chrome 78 et son pilote associé a une condition de concurrence où Selenium tente d'interroger la page Web avant qu'elle ne soit terminée.

5
wdtj

Nous avons rencontré un problème similaire avec Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.141.0.

Dans nos tests automatisés Python Selenium, nous avons vu plusieurs échecs où il semble que des clics sur les éléments ne se sont pas produits. Encore plus étrange, il semble que l'élément soit devenu actif (comme s'il s'agissait de cliquez sur), mais l'événement de clic réel ne s'est jamais produit. Par conséquent, les commutateurs de page, etc. ne se produisent pas, ce qui entraîne diverses défaillances en aval.

Par un processus de traînée et d'erreur, nous avons constaté que l'utilisation de la fonction standard .click () n'est plus fiable:

webdriver_element.click()

Mais l'utilisation des chaînes d'action semble être fiable:

ActionChains(context.browser).click(webdriver_element).perform()

On ne sait pas pourquoi c'est le cas. Les échecs ont commencé dès que nous avons mis à niveau vers Chrome 78.0.3904.7. Nous utilisons Chromedriver 77.0.3865.90 mais les mêmes tests passent de manière fiable sur Chrome 77. x versions donc il semble que quelque chose ne va pas ou a changé dans Chrome 78.

2

En ajoutant l'argument suivant, j'ai résolu mon problème.

   ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-gpu");
    options.addArguments("--disable-extensions");
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--window-size=1920,1080");
    options.merge(seleniumCapabilities);
    driver = new ChromeDriver(options);
1
zsbappa

J'ai rencontré le même problème lorsque j'essayais d'accéder à un onglet à l'intérieur d'un iframe, il fonctionnait bien sur la version 76. Maintenant qu'il s'est mis à jour en 78, il échoue. Avoir essayé les attentes, les attentes implicites, le sommeil, localiser les éléments en utilisant xpath, CSS, id, changer de contexte, faire défiler jusqu'à view, etc., sans succès. J'utilise Windows 10, 1809. Je ne sais pas si cela se produit dans d'autres systèmes d'exploitation.

Voici la question que j'ai posée:

Problème d'utilisation des localisateurs chromedriver 78.0.3904.7

1
DavidRYV

J'ai confirmé hier que ce problème ne semble se manifester que lorsqu'un élément est contenu dans un iframe. Dans ces cas, l'iframe est bien situé. Cependant, la tentative de localisation d'un élément Web à l'aide du pilote ou des objets d'attente du pilote Web entraînera respectivement un NoSuchElement ou TimeoutException.

J'ai fourni à l'équipe de chromedriver un journal du pilote détaillé chrome et ils y travaillent.

[~ # ~] mise à jour [~ # ~] : De problème chromedriver 322

Les journaux montrent que l'exécution finaleContextCreated pour le cadre ne se termine qu'après que le FindElement retourne null. À partir de la version 77, ChromeDriver a cessé d'attendre le chargement de toutes les images avant de poursuivre la navigation. Malheureusement, ce changement a empêché l'attente du chargement de la trame actuelle. 3164 attendra le chargement de la trame actuelle; cela devrait empêcher FindElement de rechercher tant que le cadre n'a pas arrêté le chargement et que le script executionContext n'est pas créé.

Fondamentalement, ce bogue a été introduit dans la v.77. Beaucoup d'entre nous viennent de remarquer ce problème car nous sommes passés de la v.76 à la .v78. Le mot est qu'ils visent un correctif pour .v80 (pas v. 79). Pour contourner ce problème, j'utilise Thread.sleep entre le moment où je passe à l'iframe et le moment où j'essaie de localiser le composant. Cette solution de contournement fonctionne bien. En fait, vous pouvez le vérifier par vous-même en exécutant simplement votre application en mode DEBUG. Lorsque vous suspendez l'exécution (en utilisant un point d'arrêt), vous remarquerez que votre code d'origine (sans sommeil) fonctionne correctement.

1
hfontanez

J'ai eu le même problème.

Après la mise à jour automatique Chrome avec la version 78.0, mes scripts de test automatisés échouaient. J'ai donc mis à jour chromedriver vers la version 78, mais le pilote n'a toujours pas pu trouver d'élément Web. Après cela, j'ai essayé avec plusieurs versions de chromedriver et enfin mon problème est résolu avec chromedriver version 2.44 .

Cette version peut être trouvée sur https://chromedriver.storage.googleapis.com/index.html?path=2.44/

0
Sagar Bhavsar

Cela s'est avéré être un problème avec Google Chrome, pas avec chromedriver: https://bugs.chromium.org/p/chromedriver/issues/detail?id=3211

0
Mix

Par exemple: vous pouvez essayer d'utiliser ces mots clés !.

1. implicit_wait=10
2. Sleep  10
0