XPath如何在表格行内选择特定的div

时间:2019-03-07 09:48:53

标签: html xpath

我正在尝试根据位于另一个<td></td>标记中的文本选择位于<td></td>标记中的特定div。可能html代码将更容易描述它:

<tr>
    <td> 
        <div class="name">test1</div>
    </td>
    <td> 
        <div class="created">Tom</div>
    </td>
    <td> 
        <div class="custom">Disabled</div>
    </td>
    <td> 
        <div class="custom">Failed</div>
    </td>
</tr>
<tr>
    <td> 
        <div class="name">test2</div>
    </td>
    <td> 
        <div class="created">Tom</div>
    </td>
    <td> 
        <div class="custom">Disabled</div>
    </td>
    <td> 
        <div class="custom">Failed</div>
    </td>
</tr>
<tr>
    <td> 
        <div class="name">test3</div>
    </td>
    <td> 
        <div class="created">Kate</div>
    </td>
    <td> 
        <div class="custom">Disabled</div>
    </td>
    <td> 
        <div class="custom">Failed</div>
    </td>
</tr>

因此,在此示例中,我想通过Xpath选择的是第二行和div,其中包含Failed文本。但是我不能使用索引,因为大小和位置并不总是恒定的,并且会随时间变化。因此,在我的案例test2中,唯一的字段是div,其名称为class。

我当时正在考虑使用following-sibling。也许是这样的: \\tr\div[@class='name' and text()='test1'],但接下来呢? div不是兄弟姐妹,而td是兄弟姐妹。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我能够使用以下方法解决它:

//td/div[text()='test1']/ancestor::tr/td/div[@class='custom' and text()='Failed']

答案 1 :(得分:1)

如果您尝试根据“测试名称”获取测试状态,请使用以下xpath。

(//div[normalize-space(.)='test2' and @class='name']/ancestor::tr//div)[last()]