通过XPath仅选择叶SPAN元素

时间:2015-11-06 14:59:14

标签: java html xml selenium xpath

我在Windows 7上使用Java和Selenium以及testng。 我的HTML代码看起来像这样(这只是其中的一部分):

<TR>
  <TH>
    <SPAN>Some Text 1</SPAN>
  </TH>
  <TH>
    <SPAN>
      <A id="someid" href="http://someurl">
        <SPAN> Some Text 2</SPAN>
      </A>
    </SPAN>
  </TH>
 </TR>

换句话说,“Some Text 1”和“Some Text 2”处于不同的跨度水平。我想找到一个XPath来找到它们。我无法使用*//TR//SPAN*,因为这会在“Some Text 2”之上获得额外的SPAN。我找不到带有文字的SPAN,因为我发现的一些文字没有文字。我认为我可以假设我所寻找的SPAN始终是TH下的最低等级SPAN

那么我可以使用XPath吗?我想,不是使用@FindBy,我可以做一些动态递归循环来找到一个跨度并继续搜索它下面的跨度,直到我来到一片叶子,但这听起来有点棘手。

3 个答案:

答案 0 :(得分:2)

此XPath

//SPAN[not(*)]

将选择所有没有子元素的SPAN元素,因此它将选择

<SPAN>Some Text 1</SPAN>
<SPAN>Some Text 2</SPAN>

,但不是包含文本2 SPAN的{​​{1}}。

如果您想将所选的SPAN元素限制为仅在SPAN元素下的某些叶子'SPAN'元素:

TH

答案 1 :(得分:1)

根据您的问题,您希望找到<{p}}的SPAN元素

  • 低于TH元素
  • 其下方不包含其他SPAN元素

然后你可以尝试这个xpath:

String xpath = "//TH//SPAN[not(.//SPAN)]"

答案 2 :(得分:1)

我不做xpath但我可以提供一些css帮助。

$$("th span:last-of-type")

这样做的目的是确定(所有)第一个孩子的跨度。