我正在为我们的系统创建一个基于 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/