Test, ob element vorhanden ist, mit Selenium WebDriver?
gibt es eine Möglichkeit, wie um zu testen, ob ein element vorhanden ist? Jede Methode findElement würde am Ende zu einer Ausnahme, aber das ist nicht das, was ich will, weil es sein kann, dass ein element nicht vorhanden, und das ist okay, das ist nicht ein fehlschlagen des Tests, so kann eine Ausnahme nicht die Lösung sein.
Ich habe festgestellt, dass dies post: Selenium c# Webdriver: Warten, Bis Element Vorhanden ist
Das ist aber für C# und ich bin nicht sehr gut darin. Kann jemand übersetzen den code in Java? Ich bin sorry, Jungs, ich versuchte es in Eclipse, aber ich bekomme es nicht direkt 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);
}
}
- Ich habe ein paar Methoden, die arbeiten sehr effektiv bei der Prüfung für ein Objekt, aber es hängt davon ab, was Sie wollen zu tun. zum Beispiel wollen Sie schauen, um das element, bis es vorhanden ist, wollen Sie solange suchen, bis es nicht mehr existiert oder wollen Sie nur versuchen, es zu finden?
- Java ist sehr ähnlich zu C#, ich denke, eines der Hauptprobleme, Sie ist hier in java ist es WebElement statt IWebElement
- Wissen Sie über die implizite wait-Methode? Durch die Einstellung am Anfang von dem test, den Sie nie haben, um zu prüfen, ob ein element Existenz, wie es ist, verwendet das implizite warten Wert zu Umfrage, aber wenn es mehr als dieser Wert wird eine Ausnahme geworfen
- Hier ist mein post über WebDriverWait in Java: WebDriverWait
- Man könnte immer nur fangen Sie Ihre Ausnahme.
- Wenn entweder Fall ok ist, kann dies problematisch sein, für die performance-test, da die wait-Zeit verbunden für das warten auf ein element, das Sie erwarten Sie nicht zu existieren wirklich summiert sich. Ich habe ein paar hacks zu umgehen, warten Sie mal, aber habe noch nicht gefunden, eine wirklich saubere Lösung für dieses.
- Den nur speichern Weg ist: static bool isElementPresent(dynamisches element, Durch die von) { try { element.FindElement(by); return true; } catch (NoSuchElementException e) { return false; } }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
findElements
stattfindElement
.findElements
wird eine leere Liste zurück, wenn keine übereinstimmenden Elemente gefunden werden, anstatt eine Ausnahme.Zu prüfen, ob ein element vorhanden ist, könnten Sie versuchen, diese
Diese gibt true zurück, wenn mindestens ein element gefunden wurde, und false, wenn es nicht vorhanden ist.
Was ist eine private Methode, die einfach aussieht, für das element und bestimmt, wenn es vorhanden ist, wie dieses:
Wäre dies ganz einfach und macht den job.
Edit: man könnte sogar noch weiter gehen und nehmen Sie ein
By elementLocator
als parameter, wodurch Probleme, wenn Sie möchten, suchen Sie nach dem element, indem Sie etwas anderes als die id.Fand ich, dass dies funktioniert für Java:
presenceOfElementLocated
wird eine Ausnahme ausgelöst, wenn das element nicht gefunden wird, auf einen bestimmten Versuch. Um dies zu vermeiden, fügen Sie einwait.ignoring(NoSuchElementException.class);
- Anweisung, die zwischen der ersten und zweiten Zeile.Ich hatte das gleiche Problem. Für mich, je nach Berechtigung des Benutzers, einige links, Schaltflächen und andere Elemente werden nicht angezeigt auf der Seite. Teil meiner suite war die Prüfung, dass die Elemente fehlen, fehlen. Ich verbrachte Stunden damit, um dies herauszufinden. Ich endlich die perfekte Lösung gefunden.
Was dies bedeutet, ist, sagt dem browser, suchen Sie für alle Elemente, basierend angegeben. Wenn es Ergebnisse in
0
bedeutet, dass keine Elemente auf der Grundlage der Spezifikation gefunden wurde. Dann hab ich den code ausgeführt, wenn die Anweisung, mich wissen zu lassen, es wurde nicht gefunden.Dies ist in
C#
, weshalb die übersetzungen müsste getan werden, umJava
. Aber sollte nicht zu hart sein.Es gibt auch einen anderen Weg Sie nehmen können, je nachdem, was Sie für Ihren test.
Folgenden Codebeispiel wird überprüft, um zu sehen, wenn Sie eine sehr spezifische element auf der Seite vorhanden ist. Je nach element Existenz ich habe den test ausführen eines if -, else.
Wenn das element vorhanden ist, und wird auf der Seite angezeigt, ich habe
console.write
lassen Sie mich wissen, und bewegen auf. Wenn das element in Frage existiert, ich kann nicht führen Sie den test durch, den ich brauchte, das ist die wichtigste Begründung brauchen, um dies einzurichten.Wenn das element Nicht vorhanden ist, und ist auf der Seite nicht angezeigt. Ich habe die else in der if-else-führen Sie den test durch.
Ich weiß, ich bin ein wenig spät mit der Antwort an den OP. Hoffentlich hilft jemand!
Versuchen Sie dies:
Diese Methode aufrufen, und übergeben Sie 3 Argumente:
Beispiel: waitForElementPresent(Fahrer, Von.id("id"), 10 );
Können Sie machen den code schneller laufen, durch kurzschließen der Selen-timeout, bevor die try-catch-Anweisung.
Ich den folgenden code verwenden, um zu überprüfen, ob ein element vorhanden ist.
Schreiben Sie die folgende Funktion/methos mit Java:
Rufen Sie die Methode mit dem passenden parameter während der Behauptung.
wenn Sie mit rspec-Webdriver in ruby, Sie können dieses Skript verwenden, vorausgesetzt, dass ein element sollte wirklich nicht vorhanden sein, und es ist eine Prüfung bestanden.
Zuerst schreiben Sie zunächst diese Methode aus Ihrer Klasse RB-Datei
Dann, auf Ihre spec-Datei rufen Sie die Methode.
Wenn Ihr das element ist NICHT vorhanden, deine Skillung passieren, aber wenn das element vorhanden ist , wird es werfen eine Fehlermeldung, test fehlgeschlagen ist.
Diese funktioniert bei mir:
Zu finden, die ein bestimmtes Element vorhanden ist oder nicht, müssen wir findElements () - Methode anstelle von findElement()..
ist dies für mich gearbeitet..
schlagen Sie mich, wenn ich falsch bin..
Dies sollte es tun:
Geben mein code-snippet. So, die unter-Methode überprüft, ob eine zufällige web-element "Create New Application " - button vorhanden ist, auf einer Seite oder nicht. Beachten Sie, dass ich die Wartezeit als 0 Sekunden.
Ich würde so etwas wie (mit Scala [der code in den alten "guten" Java 8 können ähnlich sein]):
also dann,
Einfachste Weg, fand ich in Java ist:
Können Sie versuchen, das implizite warten:
`
Oder Sie können versuchen, explizite warten Sie ein: `
`
Explizit prüfen ob element vorhanden ist, bevor eine Aktion. Implizite warten, könnte sein, rufen Sie in jedem Ort, in den code. Zum Beispiel nach einem AJAX-Aktionen.
Mehr finden Sie bei SeleniumHQ Seite
Persönlich, gehe ich immer für eine Mischung aus den oben genannten Antworten, und erstellen Sie eine wiederverwendbare statische Utility-Methode verwendet, die die Größe()<0 Vorschlag:
Dieser ist sauber, wiederverwendbar, wartbar ... all das gute Zeug 😉