【问题标题】:xpath preceding-sibling correctlyxpath 前同级正确
【发布时间】:2017-03-02 02:57:26
【问题描述】:
<table width="100%" cellpadding="2" border="0" cellspacing="0">
 <tbody>
   <tr>
    <tr>
     <td valign="top" align="left" style="width:2%">
       <input id="ucRightAdd_grdList_ctl04_chkSelect" type="checkbox"    name="ucRightAdd$grdList$ctl04$chkSelect">
     </td>
     <td width="65%" valign="top">
       <span class="BodyText"> Workflow View </span>
     </td>

在上面的 html 代码中,我需要选中文本 Workflow View 对应的复选框。我为此使用了以下代码,但它不起作用:

Driver.findElement(By.xpath("//span[contains(., \"" +rightName+ "\")]../preceding-sibling::/td/input[@type='checkbox']")).click();

【问题讨论】:

    标签: html xpath selenium-webdriver


    【解决方案1】:

    你可以使用 XPath

    //span[contains(text(), "Workflow View")]/../preceding-sibling::td/input[@type="checkbox"]
    

    注意

    • contains(text(), "Workflow View")中使用text()获取span标签内的文字。
    • [contains(text(), "Workflow View")] 后面应该有一个正斜杠
    • preceding-sibling::td 之间不应有正斜杠。

    或者,您也可以考虑使用

    //span[contains(text(), "Workflow View")]/preceding::input[@type="checkbox"]
    

    这有点简单,但也有不同的含义。 preceding 轴遍历当前节点之前的所有标签,不包括祖先:

    >>> doc.xpath('//span[contains(text(), "Workflow View")]/preceding::*')
    [<Element tr at 0x7ff01f819f18>,
     <Element td at 0x7ff01f819e68>,
     <InputElement 7ff01f819f70 name='ucRightAdd$grdList$ctl04$chkSelect' type='checkbox'>]
    

    【讨论】:

    • 谢谢。它适用于 text(),但我不知道为什么不适用 [contains(., \"" +rightName+ "\")] 其中 rightName 是 var。具有权利价值。
    【解决方案2】:

    如果每行有一个输入,则可以使用以下简单的 xpath:

    //tr[normalize-space(.)='Workflow View']/td/input

    【讨论】:

      【解决方案3】:

      这很旧,但我认为您的问题在于前兄弟轴之后的斜线。根据 W3Schools,您需要在双冒号后进行节点测试:axisname::nodetest[predicate]

      所以而不是:

      Driver.findElement(By.xpath("//span[contains(., \"" +rightName+ "\")]../preceding-sibling::/td/input[@type='checkbox']")).click();
      

      这样做:

      Driver.findElement(By.xpath("//span[contains(., \"" +rightName+ "\")]../preceding-sibling::td/input[@type='checkbox']")).click();
      

      【讨论】:

        猜你喜欢
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多