2017-03-23 2 views
2

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.

+0

Worauf schleifen Sie? – Tyler

+0

@Tyler Bearbeitet. Ich versuche zu vermeiden, zu viele "Versuche" zu verwenden, es fühlt sich klobig an. – Will

+0

Das ist komisch. Vielleicht ein Fehler? Kannst du den StackTrace teilen, wo in Selen die Ausnahme geworfen wird? –

Antwort

2

Die Ausnahme tritt auf, weil Sie das letzte Element aus dem Warenkorb entfernt haben und es gibt kein Element mehr linke Seite mit den Kriterien identifiziert werden:

Say zunächst Gegenstände hatten 5 Elemente in es während While-Schleife, bis Gegenstände. size()> 1 loop funktioniert gut, aber wenn items.size() == 1; es wird die Schleife eingeben und ausführen, aber bei

klicken Sie auf (CartPage.yesButton, "Confirm remove item");

Das letzte Element wird entfernt und es existiert kein solches Element, was zu einer Ausnahme führt, da der Wert "CartPage.itemInCart" des Locators nicht mehr in DOM vorhanden ist.

+0

Richtig, aber soll es nicht eine leere Liste zurückgeben, wenn es keine Elemente gibt? Von dem, was ich gelesen habe, ist der Hauptpunkt der Verwendung von 'findElements' gegenüber' findElement'. – Will

+0

Das ist richtig, wenn in "CartPage.itemInCart" keine Elemente vorhanden sind, aber eine Ausnahme auftritt, wenn "CartPage.itemInCart" nicht selbst vorhanden ist – kushal

Verwandte Themen