Nach meinen vielen Antworten über SE, sollte Selen driver.findElements()
eine leere List<WebElement>
zurückgeben, wenn es keine Elemente finden kann, die den Kriterien entsprechen. Warum also diese Zeile:Selenium findElements wirft Ausnahme statt leere Liste zurück
items = driver.findElements(By.linkText("remove"))
werfen Sie eine ElementNotFoundException
? Für den Kontext: Diese Zeile befindet sich in einer Schleife. Sie funktioniert mehrmals, bevor diese Ausnahme ausgelöst wird, wenn keine weiteren Links mehr vorhanden sind.
Insbesondere ist this answer ziemlich explizit, dass dies mir eine leere Liste geben sollte.
EDIT:
Hier ist die ganze Schleife, die das Problem verursacht.
List<WebElement> items;
try {
items = driver.findElements(CartPage.itemInCart);
} catch (NoSuchElementException e) {
return;
} catch (Exception e) {
throw e;
}
while (items.size() > 0) {
List<WebElement> removeButtons = driver.findElements(CartPage.removeItem);
removeButtons.get(0).click();
click(CartPage.yesButton, "Confirm remove item");
items = driver.findElements(CartPage.itemInCart); // <--Exception here
}
Notiere die try
/catch
vor der Schleife, das ist, was ich hatte gehofft, dass jedes Mal zu vermeiden, mit ich möchte überprüfen, ist ein Element sichtbar ist.
Worauf schleifen Sie? – Tyler
@Tyler Bearbeitet. Ich versuche zu vermeiden, zu viele "Versuche" zu verwenden, es fühlt sich klobig an. – Will
Das ist komisch. Vielleicht ein Fehler? Kannst du den StackTrace teilen, wo in Selen die Ausnahme geworfen wird? –