2017-09-06 32 views
3

下面的代码工作正常,当我使用List代替ArrayList我们可以使用ArrayList存储WebElements吗?

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

我想知道为什么我不能用ArrayList这里?它用于存储特定类型的元素吗?

+0

只要给它一个尝试,并检查它正在正常工作后,代码工作。 –

+0

这是过去的回应,应该有所帮助。 https://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java –

+0

你检查了['findElements()']的返回类型(http://seleniumhq.github.io /selenium/docs/api/java/org/openqa/selenium/WebDriver.html#findElements-org.openqa.selenium.By-)? – shmosel

回答

4

WebDriver#findElements(...)返回java.util.List:使用给定

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

查找当前页面中的所有元素机制。 此方法受执行时的“隐含等待”时间影响。当隐式等待时,如果找到的集合中有多于0个项目,则此方法将返回为 ,或者如果达到超时, 将返回空列表。

参数by - 定位机构使用

返回:所有WebElements的列表,或一个空列表,如果没有 匹配

明知List是一个接口, ArrayList是该接口的具体实现(类),文档不指定返回的List是否为还是不是。如果是这样,你可以简单地将它投射到ArrayList

因此,由于具体型号未知...

...如果你想要一个ArrayList,你必须construct一个从列表中返回:

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

这是唯一可靠的方法。铸造可能适用于一些驱动程序实现,但不适用于其他驱动

+0

非常感谢您的解释! –

0

列表是一个接口,ArrayList是一个实现。同样,List也有其他implementations。那么driver.findElements(locator)方法返回的可能是List接口的其他一些实现。当然,这仅仅是一个受过教育的猜测,因为我不知道是什么findElements方法返回

-1

得到了答案,findElements有返回类型列表中,因此铸造

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

工作代码与正确的代码不同。 – shmosel

+0

@shmosel是的,我明白,只是想知道,非常感谢您的帮助。 –

相关问题