2013-10-17 24 views
0

我有一個包含多行和多列的表。如何使用Selen來識別屬於同一行的元素?

我需要找到第一列中的一個元素,它位於同一行中,並且列表2中的特定元素位於同一行中。

這裏是除了HTML的

<tr> 
<td element1> 
</td> 
<td element2> 
</td> 
</tr> 

<tr> 
<td element3> 
</td> 
<td element4> 
</td> 
</tr> 

元素:元素1和元素3絕對相同的HTML。 我唯一可以用來區分它們的是他們的兄弟元素:element3和element4。

我需要找到元素3,因爲它是元件4的同級所以首先我需要縮小我的搜索元素是作爲元素4相同的行<tr英寸然後,我可以找到element3。我怎樣才能做到這一點?

PS:我不能使用.get(2)或TR [2] ...等,但我可以導航在element2和元件4分別

+0

你看過XPath嗎?我不是100%的問你在問什麼,但你說他們有完全相同的HTML - XPath是完美的。它位於位置之外,而不是任何其他標記。如果HTML足夠糟糕,你可以從開始,並說過去2個div,進入img並打到第一個。 – RankWeis

回答

1

下面的代碼片段應該工作:

List<WebElement> elements = driver.findElements(By.cssSelector("table tr > td")); 
for (int i = 0; i < elements.size; i++){ 
    if (elements[i].getAttribute("attribute that will identify element 4").equals("something")){ 
     elements[i-1].performAction(); 
} 

或者,更好的辦法是使用XPath選擇。我通常不喜歡XPath,但這是一個我會使用它的情況。

因爲我不知道這個特殊的選擇,以獲得元素,這裏是如何「前一個兄弟的作品」關於XPath:

//E/preceding-sibling::*[1] 

其中E是選擇去的元素。

5

硒2,你可以使用下面的CSS選擇選擇

driver.findElement(By.cssSelector("table tr:nth-child(X) > td:nth-child(X)")); 
+0

謝謝。我在哪裏可以找到示例?我無法完全理解如何在我的例子 –

+0

中使用'X'來實現它。如果你想在第二個'tr'下選擇第二個'td',那麼你可以使用'table tr:nth-​​child(2)td:nth-​​child(2)'來播放數字。你會得到它。 – sircapsalot

+0

這不完全是我需要的。我不知道我的元素位於第二排。 **我唯一知道的是,我的元素與element4位於同一行**我不能使用第2行第2列等 –

相關問題