2014-04-09 112 views
1

我使用硒網絡驅動程序的Java中的XPath使用ID來定位一個元素,它的id是這樣的:如何在XPath中逃脫反斜線的webdriver的Java

名\ PARAMS \等

表示此在java中,我正在使用

String id = "\\name\\params\\etc" 
driver.findElement(By.xpath("//"+"a"+"[@id='"+id+"']")); 

請讓我知道如何解決它。

+0

爲什麼元素有這樣一個id:'名\ PARAMS \ etc'?這太奇怪了。你有這個網頁的控制權,也許可以改變? – donfuxx

+0

不,我只是需要使用硒進行測試,我無法更改它 –

+1

嗯,它是一個無效的html id屬性,所以它應該被修復。將此鏈接轉發給製作代碼的開發人員:http://stackoverflow.com/a/79022/2399024 – donfuxx

回答

2

您不需要在XPath中使用任何特殊的反斜槓。反斜槓在XPath中沒有特殊含義,因此無法逃避它們(也不需要)。

你說過的話很混亂。你說這些ID就像「name \ params \ etc」(開頭沒有斜線),但是你有"\\name\\params\\etc"(斜線在開頭)。這是什麼?

你有沒有嘗試過這樣的:

String id = "name\\params\\etc" 
driver.findElement(By.xpath("//a[@id='" + id + "']")); 
+0

您是對的...我輸錯了id值這裏..所以這不是問題。元素在內部框架中,我正在檢查主體中的元素。順便說一句,感謝您的幫助 –

0

也許這是你在找什麼:

driver.findElement(By.xpath("//"+"a"+"[@id='"+id.substring(2)+"']")); 

,或者你可以嘗試:

driver.findElement(By.xpath("//"+"a"+"[@id='"+id.replace("\\","\")+"']"); 

取決於預期的結果 - 這反斜線你想逃跑?

爲了從定義ID字符串確切的給定id,你可以按照這樣的事情:

driver.findElement(By.xpath("//"+"a"+"[@id='"+id.substring(2).replace("\\","\")+"']")); 
+0

它不起作用 –

0

你有使用XPath?您的選擇器可以表示爲CSS,它可能不具有相同的轉義問題。我沒有試過這個,所以不能保證它是一個有效的CSS選擇器。

String id = "\\name\\params\\etc"; 
driver.findElement(By.css("a[id='"+id+"']")); 

就我個人而言,我會使用字符串格式來構造字符串而不是串聯,但我們個人的選擇。

你也可以嘗試這個選擇器,但認爲它可能會失敗,因爲「\」不是有效的HTML標識;

String id = "\\name\\params\\etc" 
driver.findElement(By.css("a#"+id));