2

我正在为我们的系统创建一个基于 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,从服务器中提取最新的工作代码......没有任何效果......

小伙伴们你们有什么想法?

将不胜感激任何回应。谢谢。

4

1 回答 1

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);
于 2012-11-29T20:23:36.547 回答