在硒中我們使用的語法如下: List rows = driver.findElements(By.xpath(「」));在Selenium中,「list」類型的方法FindElement存儲值
在這種語法中,我們將許多值存儲在對象引用「行」中。
但是我的問題是在這種語法中我們使用哪種類型的列表來存儲值
在硒中我們使用的語法如下: List rows = driver.findElements(By.xpath(「」));在Selenium中,「list」類型的方法FindElement存儲值
在這種語法中,我們將許多值存儲在對象引用「行」中。
但是我的問題是在這種語法中我們使用哪種類型的列表來存儲值
這裏是回答你的問題:
當你提到:
List rows = driver.findElements(By.xpath(""));
Java的基本創建List
可容納Object
類型,是raw type
但會抱怨的幾個項目,並會提供建議將其更改爲List
的generic type
。
例如,如果你把一個raw List
的下面的代碼在IDE和鼠標懸停raw List
你會看到Java Compiler
抱怨:
最佳做法建議,我們應始終創建一個通用的List
作爲每種物品的類型。一個理想的方法來創建一個List
來存儲由driver.findElements(By.xpath("my_xpath"))
返回將如下WebElements
:
List<WebElement> dd_menu = driver.findElements(By.xpath("//ul[@class='dropdown-menu']//li/a"));
現在,如果你將鼠標懸停findElements()
你會看到findElements()
方法總是返回List<WebElement>
的方法。
在這種情況下,Java編譯器沒有任何抱怨你的代碼。
讓我知道這個答案是否是您的問題。
@ debanjanB..If我是正確的,你說它是一個可以存儲多個值的唯一列表。 –
@PiyushGarg所有類型的'List'都可以存儲多個值。 'List'也可以是一個'ArrayList','LinkedList','Vector'或'Stack'類型。爲了保持我的答案簡單,簡短而又甜美,我舉了一個例子,我拿起了Selenium中使用的'findElements()'。謝謝 – DebanjanB
感謝您的回放,現在我得到一個觀點你在說什麼 –
WebDriver
是接口,並要求實現返回一個List
但它並不specifiy其具體名單,這是最高的實現。有幾種實現。
注意,一個List
只是一個接口,也有多種實現像ArrayList
,LinkedList
等。您可以在documentation中看到((標準API的)實施類的完整列表。與By.tagName
例如使用時
我現在Geckodriver(火狐家庭)和Chromedriver(Chrome系列)返回LinkedList。
但是,正如所說,其他實現可以返回其他List
對象並沒有保證gecko-和chromedriver也總是會在未來返回LinkedList
,他們可能會改變,由於接口只需要List
。
請注意,您始終可以使用Object#getClass
方法檢查對象的當前類型。
List rows = driver.findElements(By.xpath(""));
System.out.println(rows.getClass());
還要注意的是,在硒的情況下,你可以只是仰望的實施,它是開源:Selenium at GitHub。
我們看到例如ChromeDriver
和FirefoxDriver
繼承自RemoteWebDriver。它的findElements
方法將該任務委託給By對象,該對象是一個抽象類,因此我們需要回顧一下By
等的特定實現。
在年底,的XPath,我們降落在它用於尋找匹配的類BaseFinder。這個類最終使用ArrayList
。
@zubuza我對你的觀點非常感謝,但現在當我看到在Chrome中,它顯示-----------類java.util .ArrayList –
是的,看我的編輯。如果還不清楚,請回電:) – Zabuza
其公正的名單。不是數組或鏈表 –
你可以做'System.out.println(rows.getClass())',它總是會返回* true *類型,即使有人*降低了view *。例如'Object o =「test」; System.out.println(o.getClass());'輸出'類java.lang.String'而不是'Object'左右。 – Zabuza