JavascriptExecutor XPath with apostrophe



我正在尝试使用 XPath 使用 JavascriptExecutor 查找文本元素。问题是文本有一个撇号,在这种情况下我不知道如何转义它。通常,"就足够了。你能帮我吗?

我已经尝试了以下选项:

((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 表达式。在 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'

作为一个变体,尝试找到另一个没有撇号的 Xpath 定位器。不要使用函数"text(("或将部分文本与"contains(("一起使用。我认为这是真实的。

最新更新