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?
Ich gehe davon aus, dass Sie das richtige Element haben, das Sie brauchen, dh der XPath ist korrekt. Hier sind einige Auswege:
parent element
zu klicken. Submit()
anstelle von .Click()
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
.SendKeys(Keys.Enter)
für dieses Element (oder einen Space-Schlüssel) 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%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.
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.
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.
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 werdenII. 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 ();
Tags und Links c# google-chrome selenium selenium-webdriver saucelabs