JavascriptExecutor XPath with撇号

时间:2017-05-12 08:57:33

标签: javascript xpath selenium-webdriver 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';");`

3 个答案:

答案 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()"来使用部分文本。我认为这是真的。