如何使用xpath查找带有可选子元素的元素?

时间:2016-09-07 10:43:20

标签: selenium xpath

我使用Selenium和xpath来获取某些元素。我有一个包含以下元素的html页面:

<td>A</td>
<td><em>B</em></td>

我尝试使用以下xpath表达式来查找td元素:

//td[contains(text(), 'A')] 
//td[contains(text(), 'B')]

表达式找到<td>A</td>但不是<td><em>B</em></td>

如何编写一个xpath表达式,找到没有子元素和一个或多个子元素的td标签?

3 个答案:

答案 0 :(得分:2)

试试这个

//td[contains(., 'A')]
//td[contains(., 'B')]

这将返回td标签。和...之间的不同 。和text()你可以在这里参考 - XPath: difference between dot and text()

答案 1 :(得分:1)

您需要understand Testing text() nodes vs string values in XPath之间的差异。

在这里,您要测试td的字符串值:

//td[. = 'B']

那样,两者都

<td>B</td>

<td><em>B</em></td>
无论em是什么,都会选择

答案 2 :(得分:0)

您可以使用ancestor获取第一个<td>代码

//*[contains(text(), 'A')]/ancestor::td[1]
//*[contains(text(), 'B')]/ancestor::td[1]

一般情况下使用

String text = "A";
driver.findElement(By.xpath("//*[contains(text(), '" + text + "')]/ancestor::td[1]"));