2012-07-25 134 views
45

我有以下HTML結構:我想構建一個強大的方法來提取第二個顏色摘要元素,因爲DOM中會有很多這樣的標記。XPath ::獲取以下兄弟

<table> 
    <tbody> 
    <tr bgcolor="#AAAAAA"> 
    <tr> 
    <tr> 
    <tr> 
    <tr> 
     <td>Color Digest </td> 
     <td>AgArAQICGQMVBBwTIRQHIwg0GUMURAZTBWQJcwV0AoEDAQ </td> 
    </tr> 
    <tr> 
     <td>Color Digest </td> 
     <td>2,43,2,25,21,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, </td> 
    </tr> 
    </tbody> 
</table> 

我想提取具有解碼值的第二個「Color Digest」td元素。

我寫了下面的xpath,但沒有得到第二個我沒有得到第二個td元素。

//td[text() = ' Color Digest ']/following-sibling::td[2] 

而當我將它改爲td [2]到td [1]時,我得到了兩個元素。

回答

63

您應該尋找第二個tr,其td等於'Color Digest',那麼您需要查看tr中第一個td的下一個兄弟或第二個td。

嘗試以下操作:

//tr[td='Color Digest'][2]/td/following-sibling::td[1] 

//tr[td='Color Digest'][2]/td[2] 

http://www.xpathtester.com/saved/76bb0bca-1896-43b7-8312-54f924a98a89

+0

試過同樣的問題: 得到這兩個作爲結果 – 2012-07-25 19:46:57

+0

我在Firefox上使用Xpath Checker – 2012-07-25 19:47:13

+0

我用它來測試。 http://www.xpathtester.com/saved/b452f721-556c-4e9b-9758-1910b0871d4a – james31rock 2012-07-25 19:48:58

0

/html/body/table/tbody/tr[9]/td[1]

在Chrome瀏覽器(Safari瀏覽器可能太),您可以檢查一個元素,然後右鍵單擊你想要得到的XPath的標籤,那麼您可以複製XPath來選擇該元素。

+0

Yeahe我知道功能有這些元素的重複,而不是僅僅獲得一個我想建立一個強大的方法。 – 2012-07-25 19:41:59

+2

@Null-Hypothesis:請加上你的問題... – naveen 2012-07-25 19:43:14

+0

剛剛更新了問題 – 2012-07-25 19:53:23

1

你可以去識別使用XPath元素的列表:

//td[text() = ' Color Digest ']/following-sibling::td[1] 

氏s會給你一個兩個元素的列表,比你可以使用第二個元素作爲你想要的元素。例如:

List<WebElement> elements = driver.findElements(By.xpath("//td[text() = ' Color Digest ']/following-sibling::td[1]")) 

現在,你可以使用第二個元素爲你預期的元素,這是elements.get(1)