我正在为我们的系统创建基于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,从服务器中提取最新的工作代码......没有任何作用......
你有什么想法,伙计?
欢迎任何回复。感谢。
答案 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);