java - Selenium 隐式超时停止工作

标签 java api selenium

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

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

我有这一行:

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

我让它工作得很好,直到在某个时间点,我运行了它,然后 driver.findElement(By....);从未超时(网页中缺少该元素)...我等待的最长时间大约是半个小时。

我运行 Ubuntu 12.04 x64 作为我的主机,Windows 7 作为我的 guest ,在上面我有我的 Selenium API 和用 Java 编写的控制产品的代码。当我将相同的代码移植到另一个 Windows VM 甚至不同的工作站时,它工作得很好。但不在我的特定虚拟机上。

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

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

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

最佳答案

首先尝试使用 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);

关于java - Selenium 隐式超时停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13630218/

相关文章:

python - 在python中使用selenium从特定的td标签中查找tr标签的索引

java - Android 解析本地数据存储返回空

javascript - 在 react 中的每个获取请求之前附加自定义 header

python - 如何使用 selenium.py(python 代码)获取状态码

django - 自定义 Tastypie 的 URL Conf

javascript - Zendesk `app.js` 使用完整 URL 调用外部 API?

python - 改进 reCaptcha 2.0 解决自动化脚本(Selenium)

java - 根据对象参数值对 toString 中的对象进行排序

java - 从图像中去除背景噪音,使 OCR 的文本更清晰

java - OnTouchListener 坐标不正确