【问题标题】:Does Chrome use XPath 2.0?Chrome 是否使用 XPath 2.0?
【发布时间】:2014-10-16 19:11:38
【问题描述】:

我的印象是所有最新的浏览器现在都使用 XPath 2。当我使用 lower-case() 和 uppser-case()(版本 2 中引入的功能)时,Chrome 会引发语法错误。但是,他们较旧的替代品 translate() 可以正常工作。

这是一个错误还是最新的 Chrome 确实使用了 XPath 1?有没有找到 XPath 版本的命令/方法?

// Finds the element as expected.
$x('//h2/text()[. = "Delete"]') 

// Doesn't find the element (also expected).
$x('//h2/text()[. = "delete"]') 

// SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//h2/text()[lower-case(.) = "delete"]' is not a valid XPath expression.
$x('//h2/text()[lower-case(.) = "delete"]')

【问题讨论】:

  • 我看到了16658799,你仔细看答案了吗?那就先做吧。然后再读一遍我的……
  • 没有一个“大”浏览器使用 XPath 2。这就是你的答案。很简单。

标签: google-chrome selenium xpath selenium-chromedriver


【解决方案1】:

不,Chrome 使用 XPath 1.0。

您可以将 XPath 表达式简化为 v2.0 函数来查看:

$x("lower-case('ABC')")
SyntaxError: Failed to execute 'evaluate' on 'Document': The string 'lower-case('ABC')' is not a valid XPath expression.

尝试任何其他 XPath 2.0 函数(例如 current-date())都会产生类似的错误。

除了此类探测之外,没有内置方法可以明确确定 XPath 实现的版本。

另一方面,XSLT 有system-property('xsl:version') 用于确定版本 1.0 还是 2.0。

【讨论】:

  • 还是这样吗?
  • 答案向您展示了如何检查,但是,是的,2017 年 Chrome v55 仍然是这种情况:仅支持 XPath 1.0,不支持 XPath 2.0。
  • 2018 年 11 月依然如此
  • 2019 年 8 月 Chrome 76 仍然如此
  • 您好,从 2020 年 5 月开始,Covid-19 锁定! Chrome 81 仍然不支持。
【解决方案2】:

Google Chrome(或 Chromium)仍使用 libxml2,因此仅限于 XPath 1.0。参照。 this Readme from the source.

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多