2017-07-29 29 views
-1

在硒中我們使用的語法如下: List rows = driver.findElements(By.xpath(「」));在Selenium中,「list」類型的方法FindElement存儲值

在這種語法中,我們將許多值存儲在對象引用「行」中。

但是我的問題是在這種語法中我們使用哪種類型的列表來存儲值

+0

其公正的名單。不是數組或鏈表 –

+0

你可以做'System.out.println(rows.getClass())',它總是會返回* true *類型,即使有人*降低了view *。例如'Object o =「test」; System.out.println(o.getClass());'輸出'類java.lang.String'而不是'Object'左右。 – Zabuza

回答

0

這裏是回答你的問題:

當你提到:

List rows = driver.findElements(By.xpath("")); 

Java的基本創建List可容納Object類型,是raw type但會抱怨的幾個項目,並會提供建議將其更改爲Listgeneric type

例如,如果你把一個raw List的下面的代碼在IDE和鼠標懸停raw List你會看到Java Compiler抱怨:

enter image description here

最佳做法建議,我們應始終創建一個通用的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>的方法。

enter image description here

在這種情況下,Java編譯器沒有任何抱怨你的代碼。

讓我知道這個答案是否是您的問題。

+0

@ debanjanB..If我是正確的,你說它是一個可以存儲多個值的唯一列表。 –

+0

@PiyushGarg所有類型的'List'都可以存儲多個值。 'List'也可以是一個'ArrayList','LinkedList','Vector'或'Stack'類型。爲了保持我的答案簡單,簡短而又甜美,我舉了一個例子,我拿起了Selenium中使用的'findElements()'。謝謝 – DebanjanB

+0

感謝您的回放,現在我得到一個觀點你在說什麼 –

0

WebDriver接口,並要求實現返回一個List但它並不specifiy其具體名單,這是最高的實現。有幾種實現。

注意,一個List只是一個接口,也有多種實現像ArrayListLinkedList等。您可以在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

我們看到例如ChromeDriverFirefoxDriver繼承自RemoteWebDriver。它的findElements方法將該任務委託給By對象,該對象是一個抽象類,因此我們需要回顧一下By等的特定實現。

在年底,的XPath,我們降落在它用於尋找匹配的類BaseFinder。這個類最終使用ArrayList

+0

@zubuza我對你的觀點非常感謝,但現在當我看到在Chrome中,它顯示-----------類java.util .ArrayList –

+0

是的,看我的編輯。如果還不清楚,請回電:) – Zabuza

相關問題