Mögliches Problem mit Chromedriver 78, Selenium kann das in Chrome geöffnete Webelement von PDF nicht finden

17

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&amp;reanudar=&amp;>
</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.

Mischen
quelle
Heute habe ich Google Chrome Version 78 gelöscht und Version 76 installiert, und mein Automatisierungstest funktioniert wieder. Alles funktioniert perfekt. Ich hoffe, dass dieses Problem mit Version 78 behoben wird. Ich habe also chromedriver (Version 78) verwendet und in meiner .pom-Datei habe ich folgende Abhängigkeit: <dependency> <groupId> org.seleniumhq.selenium </ groupId> <artifactId> selenium-chrome-driver </ arifactId> <version> 3.141.59 </ version> </ dependency>
Mix
Ich habe das gleiche Problem. Code, der zuvor funktioniert hat, schlägt jetzt fehl, da der Webtreiber das von mir zu suchende Webelement nicht findet. Implizite und explizite Wartezeiten schlagen fehl. Was ich nicht genau bestimmen konnte, ist die Art der Elemente, mit denen es Probleme gibt oder wenn es sich nur um Komponenten handelt, die sich in einem Iframe befinden. Als Problemumgehung habe ich Thread.sleepStellen hinzugefügt, an denen ich vor diesem Update implizit oder explizit gewartet habe.
Hfontanez
Chrome 78 mit Chromedriver 77 funktioniert bei mir.
Yun

Antworten:

5

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.

wdtj
quelle
Ich habe die Ausgabe 3198 mit den ChromeDriver-Entwicklern geöffnet.
wdtj
1
Ich habe die folgende Antwort auf mein Problem erhalten: Vielen Dank, dass Sie dieses Problem gemeldet haben. Ab Version 77 wartet Chromedriver nicht auf das Laden von Frames oder Iframes, wenn Sie zu einer neuen Seite navigieren oder Fenster wechseln. Dies führt dazu, dass Code warten muss, bis Ressourcen verfügbar sind. Die meisten Bindungen haben eine explizite Wartezeit sowie die impliziten Warteeinstellungen. Suchen Sie in der Selenium-Dokumentation nach WebDriverWait, um weitere Informationen zu erhalten.
wdtj
Aber wir verwenden explizite Wartezeiten und das hilft nicht. Es hilft beim Ändern von Iframes, aber die HTML-Tags sind für eingebettetes PDF nicht mehr sichtbar.
Mischen Sie den
Ich habe eine neue Ausgabe in der chromedriver-Gruppe geöffnet
Mix
Sie können Chromium für Tests verwenden, es ist eine Basisversion von Chrome , ohne dass die Google - Dienste, wird es sich nicht aktualisieren , und es funktioniert gut mit Chromedriver: chromium.org/getting-involved/download-chromium
Blaise
3

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:

webdriver_element.click()

Die Verwendung von Aktionsketten scheint jedoch zuverlässig zu sein:

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

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.

Oli Boorman-Humphrey
quelle
Das hat mir sehr geholfen, danke.
Piedone
1

Durch Hinzufügen des folgenden Arguments habe ich mein Problem gelöst.

   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);
zsbappa
quelle
Hallo @zsbappa! Danke für Ihre Antwort. Dies löst mein Problem jedoch nicht. Das Problem ist, dass chromedriver (Version 78) kein Webelement im eingebetteten PDF finden kann. Diese Funktionalität funktionierte einwandfrei, bis Google Chrome nicht auf Version 78 aktualisiert wurde. PS Ich führe meine Tests NICHT im Headless-Modus aus
Mix
Es ist nicht klar, wie diese Optionen das OP-Problem lösen.
Cal Corbin
Dies löst das Problem nicht. Höchstwahrscheinlich führen Sie Szenarien aus, in denen sich das Webelement nicht in einem Iframe befindet.
Hfontanez
1

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

DavidRYV
quelle
1

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 NoSuchElementoder TimeoutExceptionsind.

Ich habe dem chromedriver-Team ein ausführliches Chrome-Treiberprotokoll zur Verfügung gestellt, und sie arbeiten daran.

UPDATE : Ab Ausgabe 3223 von chromedriver

Die Protokolle zeigen, dass die endgültige Ausführung von ContextCreated für den Frame erst abgeschlossen wird, nachdem das FindElement null zurückgegeben hat. Ab Version 77 hat ChromeDriver nicht mehr darauf gewartet, dass alle Frames geladen werden, bevor die Navigation fortgesetzt wird. Leider verhinderte diese Änderung ein Warten auf das Laden des aktuellen Frames. 3164 wartet alle auf das Laden des aktuellen Frames. Dies sollte verhindern, dass FindElement sucht, bis der Frame nicht mehr geladen wurde und der Ausführungskontext erstellt wurde.

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.sleepzwischen 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.

hfontanez
quelle
0

Zum Beispiel: Sie können versuchen, diese Schlüsselwörter zu verwenden!.

1. implicit_wait=10
2. Sleep  10
Narasimhamurthy GN
quelle
Hallo @Narasimhamurthy GN, danke für deine Antwort. Das explizite Warten ist kein Problem, ich verwende explizite Wartezeiten in allen meinen Tests und habe kein ähnliches Problem. Das Problem ist, dass chromedriver (Version 78) kein Webelement im eingebetteten PDF finden kann.
Mischen Sie
Bei einigen Testfällen habe ich auch das gleiche Problem, dass ich "geckodriver" (Firefox) verwendet habe.
Narasimhamurthy GN
Verwenden Sie andernfalls ein anderes Schlüsselwort für den Selenium Library Locator, um WebElement zu finden.
Narasimhamurthy GN
Leider wird empfohlen, dass die Benutzer unserer Webanwendung Chrome oder Internet Explorer verwenden. Firefox wird aus irgendeinem Grund nicht empfohlen. Deshalb kann ich Firefox nicht verwenden, um die Tests zu automatisieren. Ich habe versucht, alle möglichen Möglichkeiten zu nutzen, um mithilfe von Selen ein Webelement im PDF-Format zu finden, aber es funktioniert nicht. Ich habe auch versucht, verschiedene Abhängigkeiten und Chromedriver zu verwenden, und nichts funktioniert.
Mischen Sie den
0

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/

Sagar Bhavsar
quelle
-1

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.

Thiago
quelle
Vielen Dank für die Antwort, aber es beantwortet nicht wirklich das Problem der NoSuchElement-Ausnahmen in Chrome Version 78.
wdtj