Ich sehe das nur in Chrome.
Die vollständige Fehlermeldung lautet:
"org.openqa.selenium.WebDriverException: Element kann an Punkt (411, 675) nicht angeklickt werden. Anderes Element würde den Klick erhalten: ..."
Das Element, das den Klick erhalten würde, befindet sich neben dem betreffenden Element, nicht darüber und überlappt es nicht und bewegt sich nicht auf der Seite.
Ich habe versucht, einen Offset hinzuzufügen, aber das funktioniert auch nicht. Das Element befindet sich im angezeigten Fenster, ohne dass ein Bildlauf erforderlich ist.
google-chrome
selenium
selenium-webdriver
automated-tests
user1591169
quelle
quelle
Antworten:
Dies wird durch folgende 3 Typen verursacht:
1.Das Element ist zum Klicken nicht sichtbar.
Verwenden Aktionen oder JavascriptExecutor, um zum Klicken zu gelangen.
Durch Aktionen:
Von JavascriptExecutor:
oder
Klicken Sie dann auf das Element.
2.Die Seite wird aktualisiert, bevor auf das Element geklickt wird.
Lassen Sie die Seite dazu einige Sekunden warten.
3. Das Element ist anklickbar, aber darüber befindet sich ein Drehfeld / Overlay
Der folgende Code wartet, bis die Überlagerung angezeigt wird
Klicken Sie dann auf das Element.
quelle
Sie können auch JavaScript-Klicks verwenden, und ein Scrollen wäre dann nicht erforderlich.
quelle
actions.MoveToElement
funktionierte in C # nicht für mich und die anderen Bildlauflösungen schienen insofern etwas fragil zu sein, als die Möglichkeit bestand, dass das Bildlauf das Element nicht richtig in Sicht brachte oder sich die Position des Elements auf der Seite ändern konnte.Es scheint einen Fehler in chromedriver zu geben (das Problem ist, dass es als nicht behebbar markiert ist) -> GitHub Link
( Setzen Sie ein Kopfgeld auf FreedomSponsors Vielleicht ?)
In Kommentar Nr. 27 wird eine Problemumgehung vorgeschlagen. Vielleicht funktioniert es für Sie-
quelle
Ich hatte das gleiche Problem, habe alle angebotenen Lösungen ausprobiert, aber sie haben bei mir nicht funktioniert. Schließlich habe ich dies verwendet:
Hoffe das hilft
quelle
Ich habe dies in der Situation gesehen, als das selengetriebene Chrome-Fenster zu klein geöffnet wurde. Das Element, auf das geklickt werden soll, befand sich außerhalb des Ansichtsfensters und schlug daher fehl.
Das klingt logisch ... ein echter Benutzer müsste entweder die Größe des Fensters ändern oder einen Bildlauf durchführen, damit das Element angezeigt und tatsächlich darauf geklickt werden kann.
Nachdem ich den Selentreiber angewiesen hatte, die Fenstergröße entsprechend einzustellen, verschwand dieses Problem für mich. Die Webdriver-API wird hier beschrieben .
quelle
Wow, viele Antworten hier und viele gute.
Ich hoffe, ich werde aus meiner Erfahrung etwas hinzufügen.
Nun Leute, in meinem Fall gab es gelegentlich eine Cookie-Überlagerung, die das Element verbarg. Das Scrollen zum Element funktioniert auch. Aber meiner bescheidenen Meinung nach (für meinen Fall kein Allheilmittel für alle) ist die einfachste Lösung, einfach im Vollbildmodus zu arbeiten (ich habe meine Skripte auf einem 3/4 des Bildschirmfensters ausgeführt)! Auf geht's:
Ich hoffe, das hilft!
quelle
Ruby / Watir-Webdriver / Chrom
Ich benutze den folgenden Trick und scheint zu funktionieren:
quelle
Auch ich habe mit diesem Problem gerungen. Code funktioniert gut in FF, schlägt in Chrome fehl. Ich habe versucht, auf ein Kontrollkästchen zu klicken. Wenn es nicht angezeigt wird, würde ich zum Anzeigen scrollen und dann klicken. Selbst das Scrollen in die Ansicht funktioniert in Chrome. Nur die unteren Pixel des Kontrollkästchens waren nicht sichtbar, sodass der Webdriver sich weigerte, darauf zu klicken.
Meine Problemumgehung ist folgende:
Chrome hat auch Probleme mit sendKeys. Manchmal ist die Verwendung von Aktionen erforderlich. Natürlich müssen Sie wissen, in welche Richtung und wie viel Sie fahren müssen, damit Ihr Kilometerstand variieren kann. Aber ich ziehe dies dem Javascript-Hack vor, deshalb poste ich es hier, falls jemand anderes es nützlich findet.
quelle
Ich habe diesen Fehler erhalten, als ich Tests ohne Kopf mit xvfb-run ausgeführt habe. Sie arbeiteten einwandfrei vor Ort. Unter Verwendung von Chrome sind alle Versionen von Webdriver / Chromedriver / Chrome / Java usw. identisch.
Der Fehler "wird nicht behoben" in chromedriver - GitHub Link , auf den Tony Lâmpada hingewiesen hat, schlug vor, dass dies möglicherweise mit dem zusammenhängt, was auf dem Bildschirm angezeigt wird / nicht.
Die Hilfemeldung für xvfb-run zeigt Folgendes:
Durch Ändern der Auflösung für xvfb wurde der Fehler behoben:
quelle
Bei der Verwendung von Winkelmesser hat mir dies geholfen:
quelle
Versuchen Sie zunächst, den neuesten Chrome-Treiber abzurufen, und überprüfen Sie, ob das Problem dadurch behoben wird.
In meinem Fall wurde das Problem nicht behoben. Die folgende Lösung hat bisher bei mir funktioniert. Das Folgende ist C # -Code, aber Sie können dieselbe Logik in Ihrer spezifischen Sprache befolgen. Was wir hier tun ist,
Schritt 1: Konzentrieren Sie sich mit dem Objekt Selenium Actions auf das Element.
Schritt 2: Klicken Sie dann auf das Element
Schritt 3: Wenn es eine Ausnahme gibt, lösen wir ein Javascript "Click" -Ereignis für das Element aus, indem wir das Javascript-Skript über die "ExecuteScript" -Methode des Selenium-Browsertreibers ausführen.
Sie können auch Schritt 1 und 2 überspringen und auch nur Schritt 3 versuchen. Schritt 3 würde von alleine funktionieren, aber ich bemerkte ein seltsames Verhalten in einem Szenario, in dem Schritt 3, obwohl er erfolgreich auf das Element geklickt hatte, nach dem Klicken auf das Element unerwartetes Verhalten in anderen Teilen meines Codes verursachte.
quelle
Ich habe diese Methode basierend auf einem Kommentar aus Tony Lâmpadas Antwort gemacht. Es funktioniert sehr gut.
quelle
Ich habe das gleiche Problem beim Ausführen des Selenskripts in Python erhalten. Folgendes habe ich verwendet, um auf das Element zu klicken:
quelle
Ich hatte ein ähnliches Problem, als ich zwei Kontrollkästchen nacheinander aktivieren musste. Aber ich bekam den gleichen obigen Fehler. Dann habe ich zwischen meinen Schritten Wartezeit hinzugefügt, um die Kontrollkästchen zu aktivieren. Es funktioniert gut und großartig. Hier sind die Schritte: -
quelle
Sie müssen den Fokus verwenden oder auf diesem Element scrollen. Möglicherweise müssen Sie auch explict wait verwenden.
ODER
Das Element kann aufgrund eines darüber liegenden Spinners / Overlays nicht angeklickt werden:
ODER
ODER
Wenn immer noch nicht funktionieren
JavascriptExecutor
quelle
Anscheinend ist dies das Ergebnis eines "Won't Fix" -Fehlers in der Chrome-Treiberbinärdatei.
Eine Lösung, die für mich funktioniert hat (Our Mileage May Vary), finden Sie in dieser Google Group-Diskussion, Kommentar 3:
https://groups.google.com/forum/?fromgroups=#!topic/selenium-developer-activity/DsZ5wFN52tc
Der relevante Teil ist genau hier:
In meinem Fall verwende ich Python. Sobald ich das gewünschte Element erhalten habe, habe ich es einfach verwendet
Ich würde jedoch erwarten, dass dies nur funktioniert, wenn das Element, auf das Sie klicken möchten, ein Link ist ...
quelle
Ich hatte das gleiche Problem mit clj-webdriver (Clojure-Port von Selenium). Ich habe gerade die vorherige Lösung der Einfachheit halber in clojure übersetzt. Sie können diese Funktion vor dem Klicken oder was auch immer aufrufen, um dieses Problem zu vermeiden.
quelle
Dies kann passieren, wenn das Element seine Position ändert, während der Treiber versucht, darauf zu klicken (ich habe dies auch mit dem IE gesehen). Der Fahrer behält die Ausgangsposition bei, aber wenn er tatsächlich darauf klickt, zeigt diese Position nicht mehr auf dieses Element. Der FireFox-Treiber hat dieses Problem übrigens nicht, anscheinend "klickt" er programmgesteuert auf Elemente.
Dies kann jedoch passieren, wenn Sie Animationen verwenden oder einfach die Höhe von Elementen dynamisch ändern (z
$("#foo").height(500)
. B. ). Sie müssen sicherstellen, dass Sie erst auf Elemente klicken, nachdem sich ihre Höhe "eingestellt" hat. Am Ende hatte ich Code, der so aussieht (C # -Bindungen):Im Falle einer Animation oder eines anderen Faktors, den Sie nicht einfach abfragen können, können Sie eine "generische" Methode verwenden, die darauf wartet, dass das Element stationär ist:
quelle
Ich habe dies getroffen, weil ein Ladedialog dieses Elements abdeckt. Ich löse es einfach, indem ich eine Wartezeit hinzufüge, bevor ich mit diesem Element arbeite.
Ich hoffe das hilft!
quelle
Erklärung der Fehlermeldung :
Die Fehlermeldung besagt lediglich, dass das Element, auf das Sie klicken möchten, vorhanden ist, aber nicht sichtbar ist. Es könnte von etwas bedeckt sein oder vorübergehend nicht sichtbar sein.
Es kann viele Gründe geben, warum das Element im Moment des Tests nicht sichtbar ist. Bitte analysieren Sie Ihre Seite erneut und finden Sie die richtige Lösung für Ihren Fall.
Lösung für den Einzelfall :
In meinem Fall tritt dieser Fehler auf, wenn ein Tooltip des Bildschirmelements, auf das ich gerade geklickt habe, über dem Element angezeigt wird, auf das ich als Nächstes klicken möchte. Defocus war eine Lösung, die ich brauchte.
element.blur()
das Element aufzurufen, das den Tooltip öffnet, wodurch der Tooltip verschwindet.quelle
Der Grund für diesen Fehler ist, dass sich das Element, auf das Sie klicken möchten, nicht im Ansichtsfenster (Bereich, den der Benutzer sieht) des Browsers befindet. Um dies zu überwinden, müssen Sie zuerst zum gewünschten Element scrollen und dann den Klick ausführen.
Javascript:
Java:
quelle
Zu Tony Lâmpadas Antwort, Kommentar Nr. 27, hat das Problem tatsächlich für mich gelöst, außer dass es Java-Code lieferte und ich Python brauchte. Hier ist eine Python-Funktion, die zur Position des Elements scrollt und dann darauf klickt.
Dies löste das Problem für mich in Chrome 34.0. In Firefox 28.0 und IE 11 wurde kein Schaden verursacht. Diese Browser sind nicht vom Problem betroffen, aber das Scrollen zur Position des Elements vor dem Klicken ist immer noch keine schlechte Sache.
quelle
Vielleicht ist es keine wirklich saubere Lösung, aber es funktioniert:
quelle
Ich habe diesen Fehler bekommen, weil ich einen Hover getestet habe und dann auf den Link unter dem Tooltip klicken musste. Die Lösung bestand darin,
page.find('.sp-logo').hover
vorher etwas hinzuzufügenclick_link
, um den Tooltip aus dem Weg zu räumen.quelle
Es ist lustig, die ganze Zeit, die ich damit verbracht habe, mir die verschiedenen Antworten anzusehen, hatte niemand das Offensichtliche ausprobiert, was ich natürlich auch nicht getan hatte. Wenn Ihre Seite dieselbe ID hat, die mehrfach verwendet wurde, wie meine ("newButton"), und die gewünschte nicht die erste gefundene ist, wird dieser Fehler höchstwahrscheinlich angezeigt. Am einfachsten (C #):
Beachten Sie, dass es sich um FindElements handelt, nicht um FindElement.
Testen Sie anschließend, wie viele Ergebnisse aus dem Abruf stammen. Wenn es das zweite ist, können Sie verwenden:
Oder lassen Sie jemanden, der die IDs wiederverwendet, um sie zu reparieren.
quelle
.First(x => x.Visible)
an den FindElements-Aufruf anhängen ) und darauf zu klicken, wenn es nicht null ist.Nachdem alle genannten Vorschläge getestet wurden, funktionierte nichts. Ich habe diesen Code gemacht. Es funktioniert, ist aber nicht schön
quelle
Ich mache eine Art rohe Kraft von Klicks und es funktioniert für mich.
quelle
Wenn Sie
jQuery
auf der Seite geladen haben , können Sie den folgenden Javascript-Befehl ausführen:Beispiel mit Python Executor:
quelle
Ich hatte das gleiche Problem und es wurde durch einen ID-Konflikt zwischen dem Div und dem Link innerhalb des Div verursacht. Also klickte der Fahrer auf das Div anstatt auf den Link, den ich wollte. Ich habe die Div-ID geändert und es hat richtig funktioniert.
Vor:
Nach:
quelle
In Drupal bei Verwendung von Selen :
quelle