找到具有前一个同级元素的第一个元素匹配条件

时间:2020-02-28 13:05:01

标签: selenium xpath

我的目标是要找到匹配的前一个兄弟姐妹中包含的文本。

我的xpath如下://*[@id='myid']/parent::td(/preceding-sibling::td/label/a)[1]

在这里,我希望td/label/a的文本是//*[@id='myid']的父级中最接近的文本。

能告诉我是否遇到任何错误?非常感谢。

更新1

此人正在//*[@id='myid']/parent::td/preceding-sibling::td[2]/label/a工作,但并非每次2,有时它可能是6或其他任何事情。

更新2

示例1

<tbody>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td>
            <label>
                <a>text</a>
            </label>
        </td>
        <td></td>
        <td>
            <input id='myid'>
        </td>
    </tr>
</tobdy>

示例2

<tbody>
    <tr>
        <td></td>
        <td>
            <label>
                <a>text</a>
            </label>
        </td>
        <td></td>
        <td></td>
        <td></td>
        <td>
            <input id='myid'>
        </td>
    </tr>
</tobdy>

示例3

<tbody>
    <tr>
        <td></td>
        <td>
            <label>
                <a>text</a>
            </label>
        </td>
        <td></td>
   </tr>
   <tr> 
        <td></td>
        <td></td>
        <td>
            <input id='myid'>
        </td>
    </tr>
</tobdy>

3 个答案:

答案 0 :(得分:2)

我认为您不需要与任何祖先接触;只需转到前面的第一个td(其中包含label/a)...

//input[@id='myid']/preceding::td[label/a][1]/label/a

答案 1 :(得分:0)

您可以在下面使用xpath。获取第一个父级tr和一个子级label/a

//input[@id='myid']/ancestor::tr[1]//label/a

另一种方法是在xpath中将union operator用于所有情况下的所有定位器,以按需要进行操作:

//input[@id='myid']/ancestor::td/preceding-sibling::td/label/a | //input[@id='myid']/ancestor::tr[1]/preceding-sibling::tr//label/a

答案 2 :(得分:0)

就像我在您的示例中看到的那样,表内容似乎是动态的,但是<tbody>必须是该表的一个。

(//input[@id='myid']/preceding::td/label/a)[last()]