当我使用List
代替ArrayList
,
ArrayList<WebElement> list= driver.findElements(locator);
我想了解为什么我不能在这里使用ArrayList
?它是否用于存储特定类型的元素?
答案 0 :(得分:4)
WebDriver#findElements(...)
返回java.util.List
:
java.util.List<WebElement> findElements(By by)
使用给定的机制查找当前页面中的所有元素。 此方法受到“隐式等待”时间的影响 执行时间。当隐式等待时,此方法将返回为 一旦找到的集合中有超过0个项目,或将会 如果达到超时,则返回一个空列表。
参数:
by
- 要使用的定位机制返回:所有
WebElements
的列表,如果没有,则为空列表 匹配
知道List
是一个接口而ArrayList
是该接口的具体实现(类),文档没有指定返回的List
是ArrayList
或不。如果是,您只需将其转换为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);