下面的代码工作正常,当我使用List
代替ArrayList
,我们可以使用ArrayList存储WebElements吗?
ArrayList<WebElement> list= driver.findElements(locator);
我想知道为什么我不能用ArrayList
这里?它用于存储特定类型的元素吗?
下面的代码工作正常,当我使用List
代替ArrayList
,我们可以使用ArrayList存储WebElements吗?
ArrayList<WebElement> list= driver.findElements(locator);
我想知道为什么我不能用ArrayList
这里?它用于存储特定类型的元素吗?
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));
这是唯一可靠的方法。铸造可能适用于一些驱动程序实现,但不适用于其他驱动
非常感谢您的解释! –
列表是一个接口,ArrayList是一个实现。同样,List也有其他implementations。那么driver.findElements(locator)
方法返回的可能是List接口的其他一些实现。当然,这仅仅是一个受过教育的猜测,因为我不知道是什么findElements
方法返回
得到了答案,findElements有返回类型列表中,因此铸造
ArrayList<WebElement> list=(ArrayList<WebElement>) driver.findElements(locator);
工作代码与正确的代码不同。 – shmosel
@shmosel是的,我明白,只是想知道,非常感谢您的帮助。 –
只要给它一个尝试,并检查它正在正常工作后,代码工作。 –
这是过去的回应,应该有所帮助。 https://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java –
你检查了['findElements()']的返回类型(http://seleniumhq.github.io /selenium/docs/api/java/org/openqa/selenium/WebDriver.html#findElements-org.openqa.selenium.By-)? – shmosel