Selenium Implicit Timeout停止工作

时间:2012-11-29 16:27:08

标签: java api selenium

我正在为我们的系统创建基于Selenium API的API,该API通过Web浏览器控制(类似于您控制路由器和交换机的方式)。

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

我有这一行:

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

我让它工作正常,直到某个时间点,我运行它,以及driver.findElement(By ....);从来没有超时(网页上缺少这个元素)......我等待的最长时间大概是半个小时左右。

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

尝试"重新安装" eclipse,重新导入Selenium JAR,从服务器中提取最新的工作代码......没有任何作用......

你有什么想法,伙计?

欢迎任何回复。感谢。

1 个答案:

答案 0 :(得分: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();

其次,尝试使用Thead.sleep(1000);替代

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