2012-07-25 130 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)