我使用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标签?
答案 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]"));