Gibt es eine Möglichkeit zu testen, ob ein Element vorhanden ist? Jede findElement-Methode würde mit einer Ausnahme enden, aber das ist nicht das, was ich möchte, da es sein kann, dass ein Element nicht vorhanden ist und das in Ordnung ist, dass der Test nicht fehlschlägt, sodass eine Ausnahme nicht die Lösung sein kann.
Ich habe diesen Beitrag gefunden: Selenium c # Webdriver: Warten Sie, bis das Element vorhanden ist. Dies ist jedoch für C # und ich bin nicht sehr gut darin. Kann jemand den Code in Java übersetzen? Es tut mir leid, Leute, ich habe es in Eclipse ausprobiert, aber ich verstehe es nicht richtig in Java-Code.
Dies ist der Code:
public static class WebDriverExtensions{
public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds){
if (timeoutInSeconds > 0){
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return driver.FindElement(by);
}
}
java
selenium
selenium-webdriver
Prüfer
quelle
quelle
Antworten:
Verwenden Sie
findElements
anstelle vonfindElement
.findElements
gibt eine leere Liste zurück, wenn anstelle einer Ausnahme keine übereinstimmenden Elemente gefunden werden.Um zu überprüfen, ob ein Element vorhanden ist, können Sie dies versuchen
Dies gibt true zurück, wenn mindestens ein Element gefunden wurde, und false, wenn es nicht vorhanden ist.
Die offizielle Dokumentation empfiehlt diese Methode:
quelle
Was ist mit einer privaten Methode, die einfach nach dem Element sucht und feststellt, ob es so vorhanden ist:
Das wäre ganz einfach und macht den Job.
Bearbeiten: Sie können sogar noch weiter gehen und einen
By elementLocator
as-Parameter verwenden, um Probleme zu vermeiden, wenn Sie das Element anhand einer anderen ID als id suchen möchten.quelle
Ich fand, dass dies für Java funktioniert:
quelle
presenceOfElementLocated
löst eine Ausnahme aus, wenn das Element bei einem bestimmten Versuch nicht gefunden wird. Um dies zu vermeiden, fügen Siewait.ignoring(NoSuchElementException.class);
zwischen der ersten und der zweiten Zeile eine Anweisung hinzu.quelle
Ich hatte das gleiche Problem. Abhängig von der Berechtigungsstufe eines Benutzers werden einige Links, Schaltflächen und andere Elemente für mich nicht auf der Seite angezeigt. Ein Teil meiner Suite war das Testen, dass die Elemente, die fehlen sollten, fehlen. Ich habe stundenlang versucht, das herauszufinden. Ich habe endlich die perfekte Lösung gefunden.
Dies weist den Browser an, nach allen angegebenen Elementen zu suchen. Wenn dies zu einem Ergebnis
0
führt, wurden keine Elemente gefunden, die auf der Spezifikation basieren. Dann lasse ich den Code eine if-Anweisung ausführen, um mich wissen zu lassen, dass sie nicht gefunden wurde.C#
Da dies der Fall ist , müssten Übersetzungen vorgenommen werdenJava
. Sollte aber nicht zu schwer sein.Es gibt auch einen anderen Weg, den Sie einschlagen können, je nachdem, was Sie für Ihren Test benötigen.
Das folgende Snippet überprüft, ob auf der Seite ein ganz bestimmtes Element vorhanden ist. Abhängig von der Existenz des Elements lasse ich den Test ein if else ausführen.
Wenn das Element vorhanden ist und auf der Seite angezeigt wird, habe ich es
console.write
mir mitgeteilt und gehe weiter. Wenn das betreffende Element vorhanden ist, kann ich den benötigten Test nicht ausführen. Dies ist der Hauptgrund für die Einrichtung.Wenn das Element nicht vorhanden ist und nicht auf der Seite angezeigt wird. Ich habe das else im if else den Test ausführen.
Ich weiß, dass ich bei der Antwort auf das OP etwas spät dran bin. Hoffentlich hilft das jemandem!
quelle
Versuchen Sie Folgendes: Rufen Sie diese Methode auf und übergeben Sie 3 Argumente:
Beispiel: waitForElementPresent (Treiber, By.id ("id"), 10);
quelle
Sie können den Code schneller ausführen, indem Sie das Selen-Timeout vor Ihrer try catch-Anweisung kurzschließen.
Ich benutze den folgenden Code, um zu überprüfen, ob ein Element vorhanden ist.
quelle
Schreiben Sie die folgende Funktion / Methode mit Java:
Rufen Sie die Methode mit dem entsprechenden Parameter während der Zusicherung auf.
quelle
Wenn Sie rspec-Webdriver in Ruby verwenden, können Sie dieses Skript verwenden, vorausgesetzt, ein Element sollte wirklich nicht vorhanden sein und es ist ein bestandener Test.
Schreiben Sie diese Methode zuerst aus Ihrer Klasse-RB-Datei
Rufen Sie dann in Ihrer Spezifikationsdatei diese Methode auf.
Wenn Ihr Element NICHT vorhanden ist, wird Ihre Spezifikation bestanden, aber wenn das Element vorhanden ist, wird ein Fehler ausgegeben, Test fehlgeschlagen.
quelle
Das funktioniert bei mir:
quelle
quelle
Persönlich greife ich immer zu einer Mischung der oben genannten Antworten und erstelle eine wiederverwendbare statische Utility-Methode, die den folgenden
size() > 0
Vorschlag verwendet:Das ist ordentlich, wiederverwendbar, wartbar ... all das gute Zeug ;-)
quelle
Um festzustellen, ob ein bestimmtes Element vorhanden ist oder nicht, müssen wir die Methode findElements () anstelle von findElement () verwenden.
Das funktioniert für mich. Schlagen Sie mir vor, wenn ich falsch liege.
quelle
Dies sollte es tun:
quelle
Ich gebe meinen Codeausschnitt. Die folgende Methode prüft also, ob auf einer Seite eine zufällige Webelement -Schaltfläche " Neue Anwendung erstellen " vorhanden ist oder nicht. Beachten Sie, dass ich die Wartezeit als 0 Sekunden verwendet habe.
quelle
Ich würde so etwas verwenden (mit Scala [der Code in altem "gutem" Java 8 könnte diesem ähnlich sein]):
also dann,
quelle
Der einfachste Weg, den ich in Java gefunden habe, ist:
quelle
Sie können implizites Warten versuchen:
Oder Sie können versuchen, explizit zu warten:
Explicit prüft vor einer Aktion, ob ein Element vorhanden ist. Implizites Warten kann an jeder Stelle im Code aufgerufen werden. Zum Beispiel nach einigen AJAX-Aktionen.
Weitere Informationen finden Sie auf der SeleniumHQ-Seite
quelle