2017-09-06 48 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是的,我明白,只是想知道,非常感謝您的幫助。 –

相關問題