2012-11-29 34 views
1

我正在为通过Web浏览器控制的系统创建基于Selenium API的API(类似于您控制路由器和交换机的方式)。Selenium Implicit Timeout停止工作

此API发生的一件事是检查页面上是否存在某些元素(取决于设置,它们可能会退出,例如文本框或某种状态)。

我有这样一行:

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

我有它工作得很好,直到当在一个时间点上,我跑它,和driver.findElement(通过....);从未超时(网页中缺少元素)......我等待的最长时间是大约半小时。

我正在运行Ubuntu 12.04 x64作为我的主机,Windows 7作为我的客户,并且它上面有我的Selenium API和使用Java编写的用于控制产品的代码。当我将相同的代码移植到另一个Windows VM或甚至不同的工作站时,它可以正常工作。不是在我的特定虚拟机上。

试图“重新安装”月食,重新导入硒的JAR,拉着来自服务器的最新工作代码...没有什么工作......

你有什么想法,伙计们?

将不胜感激。谢谢。

+0

使用Thead.sleep(1000);作为替代你是如何确保硒停止在该步骤而不是在下一个? – Amey

+0

我已经通过调试器完成了测试。 – worldpart

回答

0

首先尝试使用fluentWait等待所有的AJAX页面上:

public WebElement fluentWait(final By locator){ 
     Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
       .withTimeout(30, TimeUnit.SECONDS) 
       .pollingEvery(5, TimeUnit.SECONDS) 
     .ignoring(org.openqa.selenium.NoSuchElementException.class); 
     WebElement foo = wait.until(
       new Function<WebDriver, WebElement>() { 
        public WebElement apply(WebDriver driver) { 
         return driver.findElement(locator); 
        } 
       } 
     ); 
     return foo;    }  ; 
fluentWait(By.xpath(....blablabla..)).click(); 
//fluentWait(By.xpath(....blablabla..)).getText(); 

其次,尽量

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
+0

谢谢你的算法,这绝对值得一个检查标记,但这并没有解决问题(正如我所说的,代码在其他物理机器和虚拟机上工作),这是这个特定的虚拟机不起作用。所以,它不是Selenium,不是Eclipse ... Ubuntu主机的Windows ...这些是我的想法。我会给你一个大拇指,但稍后,否则人们会停止发布答案。 – worldpart

+0

另外,它看起来像网页中没有AJAX ... – worldpart