2015-11-06 69 views
4

只选择叶SPAN元素我使用Java和硒和TestNG在Windows 7 我的HTML代码如下所示(这只是一部分):通过的XPath

<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> 

换句话说“一些文本1 “和”某些文本2“处于不同的跨度级别。我试图想出一个XPath来找到它们。我无法使用*//TR//SPAN*,因为这会在“某些文本2”之上获得额外的SPAN。我找不到带有文字的SPAN,因为我发现有些文字没有文字。我相信我可以设想的是,我期待的SPAN将始终是TH下的最低级SPAN

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

回答

2

此XPath

//SPAN[not(*)] 

将选择没有子元素都SPAN元素,所以它会选择

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

但不包含文本2 SPAN,按要求SPAN

如果要限制选择,只有那些叶子“span”元素是什么地方下TH元素SPAN元素:

//TH//SPAN[not(*)] 
1

根据你的问题,你要查找的SPAN元素

  • 低于TH元素
  • 不包含其他SPAN元素低于它们

你可以试试这个XPath,那么:

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

我不这样做的XPath,但我可以提供一些CSS帮助。

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

这将做什么是确定(所有)'th'的最后一个子跨度。

+0

谢谢。我已经休息了几天,所以我现在就看到了。我会尝试。 – Tony