XPath - 选择包含SPAN的所选XPath表旁边的TD

时间:2017-04-05 09:52:58

标签: html xpath

我有一张桌子,我试图从via xpath获取数据。该表的一个简单示例如下所示:

horse   id1 id2       id3      id4
abc      1   1         1        1
123      2   2         2        2
cba      3   3   <span>3</span> 3
321      4   4         4        4

我想要做的是查看列id3并找到包含范围代码的行(在本例中为第3行)。一旦我有了这个,我想得到该行第1列的值(跨度的那一行),这将是cba。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

如果您想匹配包含tr的{​​{1}},那么您可以使用以下span

XPath

另请注意,您可以使用target / parent / child / sibling元素的属性来使用不那么复杂且更详细的表达式。

假设您需要匹配链接

//table[1]//tr[.//span]/td[6]/a[1]

你可以使用

<tr>
    <td>
        <a class="link new-link" href="/some/source">Click me!</a>
    </td>
</tr>

//a[text()="Click me!"]

//a[@href="/some/source"]

......还有很多其他组合

答案 1 :(得分:-1)

请尝试以下代码。

List<WebElement> elements = driver.findElements(By.xpath("//td/span"));

for(int i=0;i<elements.size();i++)     
{
    System.out.println(elements.get(i).getText());   //Will give you only those data which `<td>` contains `<span>` tag.
}

更新了答案

如果您只希望第四列<td>数据包含<span>标记,请参阅以下代码。

假设您的HTML看起来像这样。

<table>
    <tr>
        <th>horse</th>
        <th>number1</th>
        <th>number2</th>
        <th>number3</th>
    </tr>
    <tr>
        <td>horse1</td>
        <td>3424</td>
        <td>data1</td>
        <td>-----</td>
    </tr>
    <tr>
        <td>horsename2</td>
        <td>123</td>
        <td><span>data2</span></td>
        <td>-----</td>
    </tr>

    <tr>
        <td>horsename2</td>
        <td>123</td>
        <td>-----</td>
        <td><span>data3</span></td>

    </tr>
</table>

参考此代码。

int b = 1;      
int[] array_list = new int[] {1,2,3};    //int b presents `<tr>` tag.

for(int i =0; i<array_list.length;i++)
{
    WebElement  span_source = driver.findElement(By.xpath("//th[4]/..//following::tr["+b+"]/td[4]"));

    try
    {
        WebElement  span = driver.findElement(By.xpath("//th[4]/..//following::tr["+b+"]/td[4]/span"));  
        System.out.println(span.getText());
    }
    catch(Exception e)
    {
        System.out.println("TD tag not contains data with span tag.");
    }

    b++;
}