我正在尝试使用JavascriptExecutor使用XPath查找文本元素。问题是文本有撇号,在这种情况下我不知道如何逃避它。通常情况下\"
就足够了。你能帮帮我吗?
我已经尝试过以下选项:
((JavascriptExecutor)driver).executeScript("var path = '//*[text()=\"d'arrivée\"]/following-sibling::div/div';
var x = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;x.style.display='block';");`
和
((JavascriptExecutor)driver).executeScript("var path = '//*[text()=\"d\"arrivée\"]/following-sibling::div/div';
var x = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;x.style.display='block';");`
答案 0 :(得分:1)
使用转义撇号尝试以下表达式:
'//*[text()="d\'arrivee"]/following-sibling::div/div'
在单引号之间使用字符串时,应使用单个反斜杠转义撇号。双引号不需要在这种类型的字符串中进行转义。
答案 1 :(得分:1)
首先构造您需要的XPath表达式。在XPath 1.0中,编写文字撇号的唯一方法是使用双引号作为字符串分隔符,因此XPath表达式为:
//*[text()="d'arrivee"]/following-sibling::div/div
(虽然使用“。”而不是“text()”是更好的做法)。
然后考虑如何在您选择的宿主语言中将其作为字符串文字进行转义,在本例中为Javascript。在Javascript中,您可以使用'
或"
作为字符串分隔符,然后必须使用反斜杠转义任何出现的字符串分隔符。所以它变成了
"//*[text()=\"d'arrivee\"]/following-sibling::div/div"
或
'//*[text()="d\'arrivee"]/following-sibling::div/div'
答案 2 :(得分:0)
作为变体尝试找到没有撇号的另一个Xpath定位器。不要使用函数" text()"或者使用" contains()"来使用部分文本。我认为这是真的。