我们可以使用ArrayList来存储WebElements吗?

时间:2017-09-06 03:11:06

标签: java selenium-webdriver arraylist

当我使用List代替ArrayList

时,下面的代码工作正常
ArrayList<WebElement> list= driver.findElements(locator);

我想了解为什么我不能在这里使用ArrayList?它是否用于存储特定类型的元素?

3 个答案:

答案 0 :(得分:4)

WebDriver#findElements(...)返回java.util.List

  

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

     

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

     

参数by - 要使用的定位机制

     

返回:所有WebElements的列表,如果没有,则为空列表   匹配

知道List是一个接口而ArrayList是该接口的具体实现(类),文档没有指定返回的ListArrayList或不。如果是,您只需将其转换为ArrayList

所以,因为具体类型未知......

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

得到答案,findElements有返回类型作为列表,因此代码在转换后工作

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