2014-09-25 44 views
-3

我試過這個示例程序,每次運行它時,它都會給出「列表中的零項」。我也嘗試過睡眠,只是爲了避免頁面跑得太快以至於無法找到元素。
我在幹什麼?無法打印正確的列表(java.util)大小

driver.get("https://www.google.co.in/"); 

     driver.findElement(By.id("gbqfq")).clear(); 
     driver.findElement(By.id("gbqfq")).sendKeys("test"); 
     List<WebElement> allElements = driver 
       .findElements(By 
         .xpath("html/body/div[2]/div[2]/div[1]/div/ul/li")); 
     Thread.sleep(3000); 
     System.out.println("there are "+allElements.size()+" items in this list"); 

PS:我是JAVA編程新手。

+2

你是否認爲它更可能是你的XPath失敗比List.size()實現?此外,*創建列表後,睡覺*不太可能有幫助... – 2014-09-25 09:49:58

+0

啊,它是一個錯誤的睡眠錯誤的地方,我認爲xpath是正確的。 – paul 2014-09-25 09:51:50

+0

將睡眠添加到非工作代碼中並不會奇蹟般地修復它。它只表現出經驗不足。 – EJP 2014-09-25 10:05:31

回答

0

在上面的代碼中xpath是絕對正確的,它沒有問題。只是頁面變得很快,webdriver無法獲得適當的時間來獲取「li」(即列表大小)的數量。
要解決的一個方法是把睡眠是不是最優化的方式和
另一種方法是使用WebDriverWait

new WebDriverWait(driver, 60).until(ExpectedConditions 
       .elementToBeClickable(By 
         .xpath("html/body/div[2]/div[2]/div[1]/div/ul/li"))); 

它應該是之前悠要存儲列表中的項目。

+0

與所有的東西webdriver,利用明確的等待。它可以節省很多頭痛。 – 2014-09-25 10:48:41

+0

已經嘗試過,但沒有成功,您是否按照您的體驗嘗試或發佈了評論。 – paul 2014-09-25 10:50:37

+1

你在答案中所做的是使用顯式等待函數。我通過說你所做的是正確的行動來支持你的回答,這是你應該做的,在大多數情況下,在別的之前嘗試。 – 2014-09-25 11:42:19