当其中一个标签是可选的时,如何通过xpath选择两个不同级别的标签

当其中一个标签是可选的时,如何通过xpath选择两个不同级别的标签,xpath,confluence,Xpath,Confluence,我遇到的情况是,数据是同一页面上这些格式的混合。换句话说,某些行将显示为: some lengthy XPATH_X uptill here: <td/> <td> I Need this element td </td> <td/> <td/> <td/> <td/> 我在页面上尝试了这个,但由于某些原因,它没有选择任何内容 有人能帮我解决这个问题吗?我已经花了两个多小时在这上面了。您应该尝试XPATH

我遇到的情况是,数据是同一页面上这些格式的混合。换句话说,某些行将显示为:

some lengthy XPATH_X uptill here:
<td/>
<td>
   I Need this element td
</td>
<td/>
<td/>
<td/>
<td/>
我在页面上尝试了这个,但由于某些原因,它没有选择任何内容


有人能帮我解决这个问题吗?我已经花了两个多小时在这上面了。

您应该尝试
XPATH\u X/td[2]//text()
来检索文本,无论它是在
td
的根目录下还是在子标记中

你可以测试它;在本测试中,我检索到三个结果:

  • span
    中的文本
  • 位于
    td
  • td
    根目录下的文本和所附
    span
    内部的文本(如果这对您不起作用,并且只有在没有
    span
    的情况下才能检索
    td
    的文本,请使用
    XPATH\ux/td[position()=2而不是(./span)]/text();XPATH\ux/td[2]/span/text()
要检索包含文本节点而不是文本节点本身的元素,可以使用以下命令:

XPATH_X/td[2]//self::node()[text()]

@亚伦非常喜欢非常感谢。不客气!我已经添加了一个答案,请确保第三个测试用例适合您。不幸的是,这个解决方案在最终代码中不起作用。问题是我使用的是element.find_element_by_xpath(您的解决方案),这失败了,因为我们返回了一些文本。我实际上需要选择元素而不是它们的文本:(我已经用这些信息更新了我的问题。您是否可以修改您的答案,以便我们选择元素而不是文本?@Mugen您可以试试
/root/td[2]//self::node()[text()]
?它应该返回
td
下包含文本的每个节点(
td
)。如果你确认答案有效,我会更新答案。我再次非常高兴!呜呜!很好:)很高兴我能帮上忙!
XPATH_X/*[self::td[position()=2] or self::td[position()=2]/span]
XPATH_X/td[2]//self::node()[text()]