2017-05-12 66 views
1

我正在嘗試使用JavaScriptExecutor使用XPath來查找文本元素。問題是文本有一個撇號,在這種情況下我不知道如何逃避它。正常情況下,\"就足夠了。你可以幫幫我嗎?帶有撇號的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

作爲@Andersson建議,我只好把\\」逃脫裏面的文字撇號: 'code'((JavascriptExecutor)驅動程序)。執行腳本(「var path ='// * [text()= \」d \\'arrivée\「]/following-sibling :: div/div'; var x = document.evaluate(path,document,null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).ssingleNodeValue; x.style.display ='block';「);' – Christina

回答

1

嘗試下面的表達與逃脫撇號:

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

當使用單引號之間的字符串,應該用一個反斜槓來跳過一個撇號。雙引號不需要在這種類型的字符串中轉義。

+0

謝謝,但它沒有奏效。我必須以某種方式首先轉義文本的分隔符:text()= \「exampletext \」,然後在文本中轉義撇號。代碼'((JavascriptExecutor)驅動程序).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';「); 'code' P.S.I縮短了搜索文本的問題,並留下了一個空間...,我現在編輯了這個問題。 – Christina

+1

你可以嘗試'((JavascriptExecutor)驅動程序).executeScript(「var path ='// * [text()= \」d \\'arrivee \「]/following-sibling :: div/div'; var x = document.evaluate(path,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue; x.style.display ='block';「);' – Andersson

+0

非常感謝!它的工作原理:) – Christina

0

作爲變體嘗試找到另一個沒有撇號的Xpath定位器。不要使用「text()」函數,或者使用「contains()」來使用部分文本。我認爲這是真實的。

+0

使用「contains()」只搜索文本的一部分,但也有類似的文本,我更喜歡精確匹配。謝謝。 – Christina

1

首先構建您需要的XPath表達式。在XPath 1.0編寫文字撇號的唯一方法就是使用雙引號作爲字符串分隔符,因此XPath表達式是:

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

(雖然使用而不是‘文本()’比較好「」實踐)。

然後考慮如何將它作爲所選主機語言的字符串字面值進行轉義,在本例中爲Javascript。在Javascript中,您可以使用'"作爲字符串分隔符,然後必須使用反斜槓轉義任何出現的字符串分隔符。因此,它成爲任何

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

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