下面的代碼工作正常,當我使用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