文本包含   时的 XPath 匹配问题 而不是常规空间

Aki*_*i T 4 selenium xpath

对于常规 HTML

<b>WordA WordB WordC</b>
Run Code Online (Sandbox Code Playgroud)

我会使用这个 XPath 来检索这个元素。

//b[text()='WordA WordB WordC']
Run Code Online (Sandbox Code Playgroud)

但我有以下 HTML

<b>WordA&nbsp;WordB&nbsp;WordC</b>
Run Code Online (Sandbox Code Playgroud)

当我尝试检索此实例中的元素时,第一个 XPath 不返回任何内容。

//b[text()='WordA\u00a0WordB\u00a0WordC']
Run Code Online (Sandbox Code Playgroud)

以上一个作品。

但是,有没有更好的方法来处理这种情况,而不是使用 '\u00a0' 部分。一些定义的函数来规范化空间。

等等:

//b[someFunction()='WordA WordB WordC']
Run Code Online (Sandbox Code Playgroud)

Mic*_*Kay 6

请注意,这是\u00a0有效的,因为您的 XPath 表达式嵌入在识别转义序列的某些宿主语言(例如 Java 或 Javascript)中uNNNN- 这是由包含的宿主语言而不是 XPath 本身转换为 NBSP 字符。如果 XPath 嵌入在 XML 中(例如在 XSLT 或 XSD 中),您将使用&#xa0;而不是\u00a0.

在 XPath 中没有处理 NBSP 的特殊方法,但您可以使用 translate() 将这些字符转换为常规空格:

//b[translate(text(), '\u00a0', ' ') = 'WordA WordB WordC']
Run Code Online (Sandbox Code Playgroud)

另请注意,在此类表达式中,通常最好使用.而不是text()访问元素的字符串值。这对可能出现的变化更有弹性,例如斜体字之一,或由注释分隔的字词。