我正在尝试使用 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(("一起使用。我认为这是真实的。