2017-09-06 5 views
3

Below Code funktioniert gut, wenn ich List statt ArrayList verwenden,Können wir mit ArrayList WebElements speichern?

ArrayList<WebElement> list= driver.findElements(locator); 

ich verstehen will, warum ich nicht ArrayList hier benutzen kann? Wird es verwendet, um bestimmte Arten von Elementen zu speichern?

+0

einfach, es zu versuchen Casting und überprüfen funktioniert es. –

+0

Hier ist eine frühere Antwort, die helfen sollte. https://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java –

+0

Haben Sie den Rückgabetyp von ['findElements()'] (http://seleniumhq.github.io /selenium/docs/api/java/org/openqa/selenium/WebDriver.html#findElements-org.openqa.selenium.By-)? – shmosel

Antwort

4

WebDriver#findElements(...) kehrt zurück ein java.util.List:

java.util.List<WebElement> findElements(By by)

alle Elemente der angegebenen Suche innerhalb der aktuellen Seite mit Mechanismus. Diese Methode wird von den impliziten Wartezeiten beeinflusst, die unter der Ausführungszeit gültig sind. Wenn implizit gewartet wird, gibt diese Methode bald zurück, sobald mehr als 0 Elemente in der gefundenen Auflistung vorhanden sind, oder gibt eine leere Liste zurück, wenn das Zeitlimit erreicht ist.

Parameter: by - Ortungsmechanismus verwenden

Returns: Eine Liste aller WebElements oder eine leere Liste, wenn nichts

Spiele

Zu wissen, dass List eine Schnittstelle und ArrayList ist eine konkrete Implementierung (Klasse) dieser Schnittstelle, die Dokumentation gibt nicht an, ob die zurückgegebene List eineistoder nicht. Wenn es wäre, könntest du es einfach auf ArrayList werfen.

Also, da der Beton Typ unbekannt ist ...

... wenn Sie eine ArrayList wollen, müssen Sie aus der Liste construct ein zurückgegeben:

ArrayList<WebElement> list = new ArrayList<>(driver.findElements(locator)); 

Das ist die einzige zuverlässige Methode ist . Casting funktioniert möglicherweise für einige Treiberimplementierungen, nicht jedoch für andere.

+0

Vielen Dank für die Erklärung !! –

0

Liste ist eine Schnittstelle und ArrayList ist eine Implementierung. In ähnlicher Weise hat List auch andere implementations. Was driver.findElements(locator) Methode zurückgibt, kann eine andere Implementierung von List Interface sein. Natürlich, das ist nur eine Vermutung, wie ich weiß nicht, was findElements Methode

-1

bekam die Antwort, hat findElements Typ als Liste zurück und damit der Code arbeitete nach

ArrayList<WebElement> list=(ArrayList<WebElement>) driver.findElements(locator); 
+0

Arbeitscode ist nicht dasselbe wie korrekter Code. – shmosel

+0

@smossel Ja, ich verstehe, war nur neugierig zu wissen, vielen Dank für Ihre Hilfe. –

Verwandte Themen