通过 XPath 仅选择叶 SPAN 元素
Posted
技术标签:
【中文标题】通过 XPath 仅选择叶 SPAN 元素【英文标题】:Select only leaf SPAN elements via XPath 【发布时间】:2016-02-07 18:22:43 【问题描述】:我在 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 来找到一个跨度并继续搜索它下面的跨度,直到我找到一片叶子,但这听起来有点棘手。
【问题讨论】:
【参考方案1】:这个 XPath
//SPAN[not(*)]
将选择所有没有子元素的SPAN
元素,因此它会选择
<SPAN>Some Text 1</SPAN>
<SPAN>Some Text 2</SPAN>
但不是包含文本 2 SPAN
的 SPAN
,根据要求。
如果您想将选中的 SPAN
元素限制为仅位于 TH
元素下的叶“SPAN”元素:
//TH//SPAN[not(*)]
【讨论】:
【参考方案2】:根据您的问题,您希望找到SPAN
元素
TH
元素下方
不要在它们下面包含另一个 SPAN
元素
你可以试试这个 xpath:
String xpath = "//TH//SPAN[not(.//SPAN)]"
【讨论】:
【参考方案3】:我不做 xpath,但我可以提供一些 css 帮助。
$$("th span:last-of-type")
这将识别(所有)“th”的最后一个子跨度。
【讨论】:
谢谢。我休息了几天,所以我现在才看到这个。我会试试的。以上是关于通过 XPath 仅选择叶 SPAN 元素的主要内容,如果未能解决你的问题,请参考以下文章
selenium通过文本内容定位元素(div,td,span等)