【发布时间】:2017-08-07 15:22:28
【问题描述】:
我进行了研究和研究,但似乎没有任何效果。假设我想要一个带有文本“托尼的电脑”的 xpath。我无法执行以下操作:
//*[contains(text(), 'Tony's Computer')]
出于显而易见的原因,因为 y 和 s 之间的 ' 取消了对文本的引用。但这也不起作用:
//*[contains(text(), 'Tony\'s Computer')]
还有
//*[contains(text(), 'Tony''s Computer')]
有没有办法摆脱撇号?我找不到任何东西。我能做的最好的事情是使用 Java 进行以下操作(假设 textToLookFor 有要查找的文本):
String[] fields = textToLookFor.split("'");
String textx = "";
for (int indx = 0; indx < fields.length; indx++) {
String stext = fields[indx];
String cont = "contains(text(),'" + stext + "') ";
if (!textx.isEmpty()) {
textx += " and ";
}
textx += cont;
}
String xpath = "//*[" + textx + "]";
基本上是做一个
//*[contains(text(),'Tony') and contains(text(), 's Computer')]
我认为这已经足够好了。但是,这不是完全匹配。例如,它可以找到“托尼和鲍勃的电脑”。
有没有其他人成功做到这一点?我找不到任何其他解决方案。 顺便说一句,当我找到元素时,我可以说 String display = ele.getText();然后检查displayed.contains(textToLookFor)。
在这种情况下,我首先需要执行 textToLookFor = textToLookFor.replaceAll("\"", "\\\""); 转义任何双引号。
【问题讨论】:
-
他们建议使用 " 而不是 ',或者使用 \' 但这对我不起作用。“他们”是指上述可能的重复 ;-)
-
您使用的是 XPath 1.0 吗?
-
@Tony 你应该发布你的代码来展示你如何实现“他们的”建议。怎么样:
String xpath = "//*[contains(.,\"Tony's Computer\")]";?