WebDriver - Element ist nicht anklickbar Chrome

8

Ich habe folgendes Problem. Ich führe Test auf Firefox und Chrome aus. Bei Firefox-Test richtig laufen, aber auf Chrome SauceLabs geben Sie eine Nachricht:

%Vor%

Ich wähle Element durch einzigartige CSS-Selektor in beiden Test auf die gleiche Weise:

%Vor%

Irgendwelche Ideen, was hier falsch ist?

    
Sowiarz 19.09.2014, 08:07
quelle

7 Antworten

10

Ich gehe davon aus, dass Sie das richtige Element haben, das Sie brauchen, dh der XPath ist korrekt. Hier sind einige Auswege:

  1. Versuchen Sie, stattdessen auf parent element zu klicken.
  2. Versuchen Sie es. Submit() anstelle von .Click()
  3. Versuchen Sie, die JavaScript auszuführen, die im Ereignis OnClick des Elements, auf das Sie klicken möchten, ausgeführt wird.

Ich habe den 3. Weg mit Erfolg die ganze Zeit benutzt.

Ein anderer

  1. Führen Sie .SendKeys(Keys.Enter) für dieses Element (oder einen Space-Schlüssel)
  2. aus
bit 19.09.2014, 09:23
quelle
7

Da Sie die Frage auch als Google-Chrome gekennzeichnet haben, nehme ich an, dass dies hauptsächlich mit ChromeDriver geschieht. Ich hatte die gleichen Probleme mit einem meiner früheren Projekte (Asp. Net MVC). Ich habe festgestellt, dass einige Elemente für diesen Treiber nicht sichtbar sind, wenn sie sich nicht im screen_visible_area befinden. Bitte beachten , dass sie richtig geladen sind (HTML, CSS3, JS usw.).

Nach vielen Lese- und Testvorgängen habe ich festgestellt, dass meine Problemumgehung einfach im WebElement angezeigt wird - also in der sichtbarer Teil des Bildschirms. Eigentlich war dieses Problem nicht für alle Elemente und ich habe keine bessere Lösung dafür gefunden.

%Vor%

Ist kein beschreibender Fehler für diesen Fall, weil ich wie Sie auch dachte, dass Selector-related ist.

Nur um volle Antwort zu sein - ich hatte auch die gleichen Probleme mit IEDriver . Meine Implementierung bestand darin, die Optionen zum Herunter- / Hochscrollen des Browsers zu verwenden und einfach "den Bildschirm zu senden", wo das problematische Element ist.

Einfacher JSExecutor-Code, den Sie verwenden können:

%Vor%

oder

%Vor%

oder

%Vor%

Weitere themenbezogene nützliche Ressourcen finden Sie hier .

Aktualisieren

Wenn es um .sendKeys() geht, habe ich auch die Barrierefreiheit des Browsers . Sie müssen lediglich zählen, wie viele TAB auf Ihre Testanforderungen klicken, um zum gewünschten web_element zu gelangen. Dann rufe einfach .click() an.

Probieren Sie diesen einfachen Code:

%Vor%

oder

%Vor%

oder

%Vor%     
ekostadinov 19.09.2014 09:37
quelle
1
Ich stelle fest, dass dies eine super alte Frage ist, aber sie kam während der Suche nach einem fast identischen Problem in der heutigen Zeit auf. Nachdem ich viele der hier beschriebenen Fixes versucht habe und neue Ausnahmen für meine Probleme (meist veraltete Elemente und Zeitlimits für HTTP-Anfragen) bekommen habe, stolperte ich über das Ausgabe auf Seleniums GitHub.

Wie in dem Beitrag beschrieben, war Chrome über die Fähigkeiten meiner Version von "chromedriver.exe" hinaus - mein v2.30-Treiber hatte Probleme mit Klickelementen aufgrund von Änderungen an der Chrome v61-Scrollmechanik. Die Aktualisierung auf die neueste Version von chromedriver.exe löste alle meine Probleme.

tl / dr: Stellen Sie sicher, dass Ihre Version von Chrometreiber mit der Version von Chrome, die getestet wird, kompatibel ist.

    
jdmac020 02.11.2017 13:43
quelle
0

Wenn Sie etwas Kompliziertes in Ihrem CSS machen, kann Chrome verwirrt werden (das ist mir passiert) und denken, dass das Element, auf das Sie klicken, von einem anderen Element abgedeckt wird, obwohl dies nicht der Fall ist / p>

Eine Möglichkeit, dies zu beheben, besteht darin, Chrome zu helfen, die Situation korrekt zu verstehen, indem Sie z-Indizes hinzufügen (Sie müssen auch eine relative oder absolute Positionierung hinzufügen), um das korrekte Element eindeutig übereinander zu platzieren.

    
Douglas Treadwell 02.02.2016 01:30
quelle
0

Für mich wurde stattdessen dieser Befehl erstellt.

%Vor%

Für meinen Fall habe ich mit der Funksteuerung interagiert.

    
joey 06.04.2016 23:11
quelle
0

Ich hatte dieses Problem bei FF. Dieses Problem tritt auf, wenn sich Ihr Feld nicht im Ansichtsbereich befindet. Der beste Weg, um dieses Problem zu lösen, ist das Verkleinern Ihres Browsers:

TheNotClickableField.SendKeys (Keys.Control + "-" + "-");

Sie möchten mehr oder weniger abhängig von Ihrer Seitengröße verkleinern.

    
Zaher 21.04.2016 09:21
quelle
0

Ich. Wenn sich die Schaltfläche am unteren Rand der Seite befindet, könnte der folgende Code verwendet werden, um Sie über JavaScript nach unten zu bringen, von wo der Klick ausgeführt werden kann:

(Treiber als IJavaScriptExecutor) .ExecuteJavaScript ("window.scrollTo (0, document.body.scrollHeight - 150)");

Dieselbe Aktion könnte über C # mit der von Selenium zur Verfügung gestellten Actions-Klasse ausgeführt werden. Dies bringt Sie zum Ende der Seite ----- & gt;

neue Aktionen (Treiber) .SendKeys (Keys.End) .Perform ();

Keys.End könnte mit Keys.PageDown // Keys.Space

umgeschaltet werden

II. Wenn Sie die genaue Position des Elements erreichen möchten, können Sie:

1.Holen Sie die Y-Position des Elements --- & gt; var elementToClick = driver.findElement (By. {Anything} (""));

2. Führen Sie den folgenden JS --- & gt; aus (Treiber als IJavaScriptExecutor) .ExecuteScript (string.Format ("window.scrollTo (0, {0})", elementToClickYLocation.Location). Y));

3.Klicken Sie auf das Element --- & gt; elementToClick.click ();

    
Valentin Rangelov 25.08.2017 09:46
quelle