2015-04-03 200 views
1

我有一個測試套件,其中我必須必須使用CSS選擇器。Selenium無法定位瀏覽器中的元素DOM

當我做出過硒查詢

driver.findElement(By.cssSelector("#credentials.errors")); 

OR

if (driver instanceof JavascriptExecutor) { 
     ((JavascriptExecutor) driver).executeScript("document. 
     getElementById('credentials.errors');"); 
    } 

OR

如果我在瀏覽器csspath查詢手動搜索#credentials.errors

它只是不能找到元素,但是 我可以讓查詢

document.getElementById('credentials.errors') 

我的問題找到在瀏覽器控制檯這個元素,如果元素可以通過位於JavaScript控制檯,那麼爲什麼不通過硒的webdriver?

+0

嘗試使用顯式等待直到selenium webdrive找到元素。 – 2015-04-03 11:22:34

回答

2

的選擇#credentials.errors查找具有ID「資格證書」和一類的「錯誤」的元素等, ID爲「credentials.errors」的元素。點被解釋爲類選擇器的開始。換句話說,它相當於.errors#credentials,兩個簡單的選擇器交換。

document.getElementById()可以工作,因爲它只需要一個字符串作爲輸入ID。它不會嘗試將其解析爲複合選擇器。

要正確使用ID選擇定位的元素,你需要躲避點:

driver.findElement(By.cssSelector("#credentials\\.errors")); 

您也可以使用屬性選擇器代替你沒有逃避什麼:

driver.findElement(By.cssSelector("[id='credentials.errors']")); 
0

也許阿賈克斯通話後客戶端腳本創建的元素,所以你需要使用WebDriverWait

+0

是的,它是Ajax,但我甚至無法手動在css查詢路徑中搜索它。但是,在js控制檯它完美的作品。 – 2015-04-03 12:14:49

0

由於您使用的ID找到元素,你可以使用下面的,而不是使用By.cssSelector:

driver.findElement(By.Id("credentials.errors")); 
+0

NO。我無法仔細閱讀佇列。我說css是必須的 – 2015-04-04 06:15:23

相關問題