【问题标题】:Using upper-case and lower-case xpath functions in selenium IDE在 selenium IDE 中使用大写和小写的 xpath 函数
【发布时间】:2009-10-26 15:21:03
【问题描述】:

我正在尝试使用 xpath 函数 lower-caseupper-case 获取 xpath 查询,但它们似乎不适用于 selenium(我在应用之前测试我的 xpath)。

不起作用的示例:

//*[.=upper-case('some text')]

只要不使用大小写,在复杂路径中定位我需要的节点甚至使用聚合函数都没有问题。

有没有人遇到过这种情况?有意义吗?

谢谢。

【问题讨论】:

标签: xpath selenium-ide uppercase lowercase


【解决方案1】:

upper-case()lower-case() 是 XPath 2.0 函数。您的平台可能仅支持 XPath 1.0。

试试:

translate('some text','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')

这是 XPath 1.0 的实现方式。不幸的是,这需要了解文本使用的字母表。对于简单的英语,上述方法可能有效,但如果您希望使用重音字符,请确保将它们添加到列表中。


在大多数环境中,您在某种宿主语言之外使用 XPath,并且可以使用宿主语言的功能来解决此 XPath 1.0 限制,方法是从外部向 @987654324 提供搜索字符串的大小写变体@。

以 Python 为例:

search = 'Some Text'
lc = search.lower()
uc = search.upper()

xpath = f"//p[contains(translate(., '{lc}', '{uc}'), '{uc}')]"

这将产生以下 XPath 表达式:

//p[contains(translate(., 'some text', 'SOME TEXT'), 'SOME TEXT')]

不区分大小写搜索并适用于任意搜索文本。

【讨论】:

  • 确实,谢谢!不幸的是,这根本不是“干净”的...... :((它会使我们在 GenericFixture for Fitnesse 中已经复杂的 DSL 定义变得更加复杂)。任何人都知道什么时候 selenium RC 或 Firefox(我不知道一个负责)会采用XPath 2.0吗?
  • 对不起,我不知道。我知道它不干净,但它是 XPath 1.0 中最好的。
  • @Aristotelis:是的,这似乎并不清楚,但它背后有它的原因。 XML 是 Unicode,而不是 ASCII/英文。因此,对于大写,它需要了解排序规则。 XPath 2.0 中添加了排序规则知识。
【解决方案2】:

如果您需要在 xslt 的多个位置使用大写字母,您可以为小写字母和大写字母定义变量,然后在任何地方的翻译函数中使用它们。它应该让你的 xslt 更干净。

XSL/XPATH : No upper-case function in MSXML 4.0 ? 的示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多