带有撇号的 JavascriptExecutor XPath

JavascriptExecutor XPath with apostrophe

我正在尝试使用 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';");`

尝试使用转义撇号的以下表达式:

'//*[text()="d\'arrivee"]/following-sibling::div/div'

在单引号之间使用字符串时,应使用单个反斜杠转义撇号。双引号不需要在这种类型的字符串中进行转义。

作为变体,尝试找到另一个没有撇号的 Xpath 定位器。不要使用函数 "text()" 或通过 with "contains()" 使用部分文本。我觉得是真的。

首先构造你需要的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'