Bis mein Google Chrome nicht auf Version 78 aktualisiert wurde, funktionierte mein Code einwandfrei. Ich habe auch den Chromedriver auf Version 78.0.3904.70 aktualisiert. Daher kann ich WebElement mit id = 'plugin' mit Selenium WebDriver und Java nicht mehr finden:
<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&reanudar=&>
</div>
</html>
Abgesehen von diesem Teil funktionieren meine Tests einwandfrei. Ich hatte noch nie ein ähnliches Problem. Ich habe auch versucht, WebElement id = 'content' zu finden, erhalte jedoch den gleichen Fehler.
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);
Mein Automatisierungsskript sollte das PDF-Element finden und die Seite nach unten scrollen. Stattdessen wird folgende Fehlermeldung angezeigt: org.openqa.selenium.TimeoutException: Zeitüberschreitung nach 90 Sekunden, die auf die Sichtbarkeit des Elements wartet, das sich im By.id: Plugin befindet
Steht jemand vor einem ähnlichen Problem? Danke im Voraus.
Thread.sleep
Stellen hinzugefügt, an denen ich vor diesem Update implizit oder explizit gewartet habe.Antworten:
Ich bin auf das gleiche Problem gestoßen.
Anscheinend aktualisiert sich Chrome automatisch. Gestern (29. Oktober 19) hat sich mein ChromeDriver darüber beschwert, dass er nicht mit Chrome 78 kompatibel ist. Ich habe den Treiber auf die 78-Version aktualisiert. Ich habe angefangen, zufällige org.openqa.selenium.NoSuchElementException-Ausnahmen zu erhalten, als ich versucht habe, Elemente zu finden, von denen ich bestätigt habe, dass sie vorhanden sind. Die findElement [s] funktionieren auch, wenn ich Haltepunkte verwendet habe. Ich habe auch implizite Wartezeiten versucht, mit nur begrenztem Erfolg.
Ich habe die ChromeOption-Lösung von zsbappa ausprobiert, aber keine Freude.
Google macht es schwierig, alte Versionen von Chrome zu erhalten, aber ich habe Version 76 unter https://www.neowin.net/news/google-chrome-76-offline-installer/ gefunden . Beachten Sie, dass das Online-Installationsprogramm die neueste Version installiert. Ich bin für 76 zum Fahrer zurückgekehrt und alles ist gut. Alle meine Selentests funktionieren wieder.
Mein Fazit ist, dass das Chrome 78 und der zugehörige Treiber eine Rennbedingung haben, bei der Selenium versucht, die Webseite abzufragen, bevor sie vollständig ist.
quelle
Wir haben ein ähnliches Problem mit Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.141.0 festgestellt.
In unseren automatisierten Python Selenium-Tests haben wir mehrere Fehler festgestellt, bei denen anscheinend keine Klicks auf Elemente aufgetreten sind. Noch seltsamer scheint es, dass das Element aktiv geworden ist (als würde es gleich angeklickt), aber das eigentliche Klickereignis ist nie aufgetreten. Infolgedessen treten keine Seitenwechsel usw. auf, was zu verschiedenen nachgeschalteten Fehlern führt.
Durch einen Prozess von Spur und Fehler haben wir festgestellt, dass die Verwendung der Standardfunktion .click () jetzt nicht zuverlässig ist:
Die Verwendung von Aktionsketten scheint jedoch zuverlässig zu sein:
Es ist nicht klar, warum dies der Fall ist. Die Fehler begannen, sobald wir ein Upgrade auf Chrome 78.0.3904.7 durchgeführt hatten. Wir verwenden Chromedriver 77.0.3865.90, aber die gleichen Tests bestehen zuverlässig auf Chrome 77.x-Versionen. Daher scheint etwas in Chrome 78 nicht zu stimmen oder sich geändert zu haben.
quelle
Durch Hinzufügen des folgenden Arguments habe ich mein Problem gelöst.
quelle
Ich habe das gleiche Problem beim Versuch, auf eine Registerkarte in einem Iframe zuzugreifen. Bei Version 76 funktionierte sie einwandfrei. Nachdem sie sich auf 78 aktualisiert hat, schlägt sie fehl. Habe versucht, zu warten, implizit zu warten, zu schlafen, die Elemente mit xpath, CSS, id zu suchen, den Kontext zu wechseln, bis zur Ansicht zu scrollen usw., ohne Glück. Ich verwende Windows 10, 1809. Ich weiß nicht, ob dies in einem anderen Betriebssystem geschieht.
Hier ist die Frage, die ich aufgeworfen habe:
Problem mit den Chromedriver 78.0.3904.70 Locators
quelle
Ich habe gestern bestätigt, dass sich dieses Problem nur zu manifestieren scheint, wenn ein Element in einem Iframe enthalten ist. In diesen Fällen befindet sich der Iframe in Ordnung. Um jedoch ein Stegelement zu lokalisieren versucht der Fahrer oder Web - Treiber Warte Objekte verwendet , wird in ein Ergebnis
NoSuchElement
oderTimeoutException
sind.Ich habe dem chromedriver-Team ein ausführliches Chrome-Treiberprotokoll zur Verfügung gestellt, und sie arbeiten daran.
UPDATE : Ab Ausgabe 3223 von chromedriver
Grundsätzlich wurde dieser Fehler in Version 77 eingeführt. Viele von uns haben dieses Problem gerade bemerkt, weil wir ein Upgrade von Version 76 auf Version 78 durchgeführt haben. Es heißt, dass sie auf ein Update für .v80 abzielen (nicht auf Version 79). Als Problemumgehung verwende ich
Thread.sleep
zwischen dem Zeitpunkt, zu dem ich zum Iframe wechsle, und dem Versuch, die Komponente zu finden. Diese Problemumgehung funktioniert einwandfrei. Tatsächlich können Sie dies selbst überprüfen, indem Sie Ihre Anwendung einfach im DEBUG-Modus ausführen. Wenn Sie die Ausführung anhalten (mithilfe eines Haltepunkts), werden Sie feststellen, dass Ihr ursprünglicher Code (ohne Ruhezustand) einwandfrei funktioniert.quelle
Zum Beispiel: Sie können versuchen, diese Schlüsselwörter zu verwenden!.
quelle
Es stellte sich heraus, dass es sich um ein Problem mit Google Chrome und nicht mit chromedriver handelte: https://bugs.chromium.org/p/chromedriver/issues/detail?id=3211
quelle
Ich hatte das gleiche Problem.
Nach der automatischen Aktualisierung von Chrome mit Version 78.0 schlugen meine automatisierten Testskripte fehl. Also habe ich chromedriver auf die 78-Version aktualisiert, aber der Treiber konnte immer noch kein Webelement finden. Danach habe ich es mit mehreren Versionen von chromedriver versucht und schließlich ist mein Problem mit chromedriver Version 2.44 behoben .
Diese Version finden Sie unter https://chromedriver.storage.googleapis.com/index.html?path=2.44/
quelle
Sie können Nuget Paket - Manager, löschen Chrome - Laufwerk und für Chrom suchen, laden Sie die neue Version selenium.web.driver.ChromeDriver >> für jsaKamoto
dort finden Sie Chrom Version 78.
quelle