我已经阅读了有关不区分大小写的XPath搜索的以下三个问题的答案:
case insensitive xpath contains() possible?
Using upper-case and lower-case xpath functions in selenium IDE
XPath find text in any text node
当我尝试Chrome和Firefox中建议的XPath 1和2解决方案时,它们都不起作用(很好)。
我正在寻找一个单词,该单词当前使用大写的首字母和其余的小写字母(例如:Example
)编写,但是translate(.,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLOMNOPQRSTUVWXYZ')
在使用at时根本找不到该字符串至少两个字母。我尝试了EX(2个匹配,示例中均未找到),ex(0个匹配),Ex(0),xa(0),XAM(0)
将翻译顺序更改为translate(.,'ABCDEFGHIJKLOMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
会导致EX(0个匹配),ex(0),Ex(0),xamp (1个匹配-正确!!但我必须排除首字母,xa(0)
尝试上面链接的答案中建议的XPath 2.0解决方案会返回以下错误:
我要对此XPath执行区分大小写的搜索
//div[@class='nav group']//a[contains(text(), 'Example')]
我该怎么做?
答案 0 :(得分:0)
这是xpath。
//div[@class='nav group']//*[translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='example']
答案 1 :(得分:0)
可悲的是,在XPath 2.0发布12年之后,尽管存在XPath 1.0的所有已知限制,但浏览器供应商仍未更新其XPath实现。
有可用的第三方实现(例如,Saxon-JS支持XPath 3.1),这是前进的一种可能方法。
但是,只要您只使用英语字母,XPath 1.0的解决方法就可以使用
contains(translate(., 'abcde...', 'ABCDE...'), "EXAMPLE")
应该工作正常。
您可以将所有内容翻译成大写并针对大写搜索词进行测试,也可以将所有内容翻译成小写并针对小写搜索词进行测试。
答案 2 :(得分:0)
这里有两个我可能会派上用场的功能。在进行翻译时,您实际上不必指定整个字母,只需要您要搜索的单词的字母即可:
public String translate(String text) {
return "translate(text(),'" + text.toUpperCase() +
"','" + text.toLowerCase() + "')='" + text.toLowerCase() + "'";
}
public String translateNormalized(String text) {
return "translate(normalize-space(text()),'" + text.toUpperCase() +
"','" + text.toLowerCase() + "')='" + text.toLowerCase() + "'";
}
我使用这些功能来构建xpath定位器,即:
String xpath = "//a[" + translateNormalized("Click here for more info") + "]";