2014-09-25 32 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