2013-02-12 22 views
1

我在我的網頁上有兩個列表,他們都有按鈕(圖片)來選擇列表中的所有項目。這兩個圖像都具有相同的ID,並且沒有類名,CSS,XPath等其他信息。我想點擊第二張圖片從第二個列表中選擇所有項目。但是,當網絡驅動程序執行以下行:如何使用Selenium Webdriver在同一頁上區分具有相同ID的兩個元素?

driver.findElement(By.id("MoveAllRight")).click(); 

它總是點擊第一個圖像,但我想它點擊第二個。

有人可以幫我嗎?

+0

你不應該有相同ID的網頁上兩個元素......一個ID爲標識符ergo應該只有一個具有該id的HTML頁面上的一個元素。這是無效的HTML多次使用一個ID – 2014-03-10 15:40:50

回答

2

它總是點擊第一個,因爲findElement將返回找到的符合條件的第一個。您可以使用findElements返回匹配的所有元素的列表,然後訪問找到的第二個元素。您也可以使用xpath,如// img [@ id ='MoveAllRight'] [2]。

你可能想要做的一件事是調查你是否可以創建一個xpath來考慮下拉應該與這種方式相關聯,你可以確保你點擊的圖像總是該圖像的特定落下。這很難取決於你的應用程序。

+1

您的XPath將只選擇現有元素中的ID的第二個孩子。如果你想選擇它的第二個實例,你應該在XPath中放置括號。 – Ardesco 2013-02-25 12:38:26

7

不要。相反,提出一個錯誤。這是無效的HTML。

如果你真的想繼續測試的東西是無效的,而且你也想破壞你的自動化測試(你真的不想做),你可以做到以下幾點:

driver.findElement(By.xpath("(//img[@id='MoveAllRight'])[2]")).click(); 

它會起作用,但這是不對的。

1
list<webelement> listele = driver.findelements(by.tageName("Img"); 
syso(listele.size) 

listele.get(0).click; 
listele.get(1).click; 
+0

作品真棒!感謝mahesh! – 2016-08-09 06:40:05

0

我是從去年3天各種選項嘗試,最後用這個代碼解析:

list<webelement> listele = driver.findelements(by.tageName("Img"); 
syso(listele.size) 

listele.get(0).click; 
listele.get(1).click; 
相關問題