Java Selenium Xpath查找div标记内的表单元格

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<

我有以下HTML代码,需要检查表格单元格中是否存在文本:

<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