一个Xpath表达式在selenium中不起作用,但在Firefox中有效

use*_*867 4 html css xpath webdriver selenium-webdriver

我有一个关于xpath的问题.在chrome中有这样的td:

<td class="dataCol col02">
"Hello world(notes:there is$)nbsp;"
<a href="xxxx">[View Hierarchy]</a>
</td>
Run Code Online (Sandbox Code Playgroud)

但是当我在Firefox中检查相同的元素时,它没有$ nbsp和双引号;

<td class="dataCol col02">
Hello world
<a href="xxxx">[View Hierarchy]</a>
</td>
Run Code Online (Sandbox Code Playgroud)

我使用FireFinder并使用xpath:

//td[text()='Hello world']
Run Code Online (Sandbox Code Playgroud)

,它可以找到该元素.

但是当我使用selenium api 2.24时,它找不到那个元素.

by.xpath("//td[text()='Hello world']")
Run Code Online (Sandbox Code Playgroud)

你有什么想法吗?谢谢!

pau*_*rth 7

尝试normalize-space()修剪前导和尾随空白字符:

//td[normalize-space(text())='Hello world']
Run Code Online (Sandbox Code Playgroud)

编辑以下不同的评论:

这是一个XPath表达式,可能更适合一般情况:

//td[starts-with(normalize-space(.), 'Hello world')]
Run Code Online (Sandbox Code Playgroud)

意味着它匹配<td>节点,如果整个<td>,较少的前导和尾随空格的连接字符串内容,以"Hello world"开头

  • 我同意你在SO上找到的一些用例通常不需要`text()`.但是`.`和`text()`在这种情况下并不相同:`.`是当前节点,在这种情况下`<td class ="dataCol col02"> Hello world <a href="xxxx"> [查看层次结构] </a> </ td>`; `<td>`有2个节点,1个文本节点包含"Hello world"和1个`<a>`节点.`text()`只选择文本节点.您可以在http://www.freeformatter.com/xpath-tester.html中测试不同的表达式 (3认同)