Selenium XPath用于粗体<b> </b>标记

时间:2019-10-07 17:11:27

标签: selenium xpath

下面是包含我要为其获取XPath的b(粗体)标记的HTML。

    <tbody>
      <tr>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">..</td>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
          <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>Xyz</B></DIV>">
            <b>Xyz</b>
          </div>
        </td>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
          <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>01/01/2019</B></DIV>">
            <b>01/01/2019</b>
          </div>
        </td>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">..</td>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
          <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>Abc</B></DIV>">
            <b>Abc</b>
          </div>
        </td>
      </tr>
    </tbody>

我想到了以下xpath://div[@class='get-HTML']/b,但还有很多其他b标签。

例如,如果我必须阅读下面的标签中的文字,该如何精确?

<td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
    <div class="get-HTML" __listner="<DIV class=gwt-HTML><B>01/01/2019</B></DIV>">
        <b>01/01/2019</b>
    </div>`

尝试了这个xpath但没有用:

//div[@class='get-HTML']/b[2]

您能帮我破解这个xpath吗?

2 个答案:

答案 0 :(得分:1)

由于所有b元素上方的HTML树都是相同的-意味着tr/td/div/b将始终检索3个不同的b元素,因此您将需要使用索引来访问所需的元素

根据要检索的b标签,您将需要使用td元素的索引来获取标签,因为同一级别上有多个td元素:

//tr/td[index]/div/b

应用此示例,我们可以像这样检索b标签:

要获取Xyz//tr/td[2]/div/b

要获取01/01/2019//tr/td[3]/div/b

要获取abc//tr/td[5]/div/b

或者,如果您想根据其文本获取b标记,则路径也不同:

//b[text()='xyz']

但是,这只会给您一个b元素,并且您必须事先知道其文本,因此,如果您不知道b元素内的文本,则不需要这种方法。

答案 1 :(得分:0)

如果您想非常具体,请在XPath中添加更多父元素。

始终获得正确的XPath的简便技巧:使用Google Chrome检查器>选择元素>右键单击HTML标签>复制> XPath

在这种情况下:

<tbody>
    <tr>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">..</td>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
        <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>Xyz</B></DIV>">
          <b>Xyz</b>
        </div>
      </td>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
        <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>01/01/2019</B></DIV>">
          <b>01/01/2019</b>
        </div>
      </td>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">..</td>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
        <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>Abc</B></DIV>">
          <b>Abc</b>
        </div>
      </td>
    </tr>
  </tbody>

第三个b标签的XPath是:/html/body/div[3]/b

就您而言,也许您不需要删除/html/body/。这取决于您的HTML代码位于哪些父元素中。

注意:因此,如果使用此精确方法,则在使用不同的父元素时XPath也会更改。例如:在动态生成的页面上实现起来可能会更加困难。