Java Selenium Xpath查找div标记内的表单元格
我有以下HTML代码,需要检查表格单元格中是否存在文本:Java Selenium Xpath查找div标记内的表单元格,java,selenium,xpath,Java,Selenium,Xpath,我有以下HTML代码,需要检查表格单元格中是否存在文本: <div class="background-ljus" id="AutoText"> <table class="topAlignedCellContent"> <tbody> <tr> <td>X1</td> </tr> <tr> <td>X2<
<div class="background-ljus" id="AutoText">
<table class="topAlignedCellContent">
<tbody>
<tr>
<td>X1</td>
</tr>
<tr>
<td>X2</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td>Y1</td>
<td>Y2</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td>Z1</td>
<td>Z2</td>
</tr>
</tbody>
</table>
</div>
有人对我的XPath不工作的原因有什么建议吗 您的xpath错误。您应该使用
text()
而不是text()
。另外,contains()
是一个带有圆括号而不是方括号的函数。试试这个-
"//div[@id='AutoText']//td[contains(text(), 'celltext')]"
"//div[@id='AutoText']//td[contains(., 'celltext')]"
或者,如果希望显示包含文本的所有子元素,请使用
而不是text()
希望有帮助。错:
*//div[@id='AutoText']//td[contains[Text(), 'celltext']]
*//div[@id='AutoText']//table//tbody//tr[td//Text()[contains[., 'celltext']]
正确(使用较短的备选方案):
是一个函数contains()
需要小写text()
- 谓词可以嵌套
- 不必使用时,不要使用
/
指的是“此节点”,当作为字符串函数(如contains()
)的参数提供时,它相当于string(.)
。但是,这与text()
完全不同
string(.)
创建当前节点内所有文本节点的串联,无论嵌套有多深text()
是一个字符串,默认情况下仅选择直接子项
换句话说,如果当前节点是foobarbaz
,contains(text(),'bar')
实际上是false。(出于不同的原因,包含(text(),'baz')
)
另一方面,contains(,'bar')
将返回true,contains(,'baz')
只有当当前节点只包含一个文本节点时,
text()
和
才是等效的。大多数情况下,您都希望使用
而不是text()
。相应地设置谓词。您也可以使用动态xpath进行设置
//div[@id='AutoText']/table[1]//tbody/tr[1]/td
现在只需将1替换为i,并使用for循环来查看元素是否返回任何值Thank//div[@id='AutoText']//td[contains(,'celltext')]”解决了这个问题problem@Calle如果它解决了您的问题,请将其标记为答案,以便其他人发现它有帮助。谢谢。看看我在答案中添加的注释,它指出了一个重要的警告。
*//div[@id='AutoText']//td[contains[Text(), 'celltext']]
*//div[@id='AutoText']//table//tbody//tr[td//Text()[contains[., 'celltext']]
//div[@id='AutoText']//td[contains(text(), 'celltext')]
//div[@id='AutoText']//td[contains(., 'celltext')]
//div[@id='AutoText']/table/tbody/tr[td//text()[contains(., 'celltext')]
//div[@id='AutoText']/table/tbody/tr[td[contains(., 'celltext')]]
//div[@id='AutoText']/table[1]//tbody/tr[1]/td