好。当我处理 AJAX 时,我总是使用流利的等待方法。假设您在单击提交按钮后有消息的定位器:
String xPathMessage= ".//*[@id='easyNotification']";
public WebElement fluentWait(final By locator){
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(
new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
}
);
return foo; } ;
//simply call the method:
String text=fluentWait(By.xpath(xPathMessage)).getText();
来自有关 fluent wait 的文档:
Wait 接口的实现,它可以动态配置其超时和轮询间隔。每个 FluentWait 实例定义等待条件的最长时间,以及检查条件的频率。此外,用户可以将等待配置为在等待时忽略特定类型的异常,例如在页面上搜索元素时的 NoSuchElementExceptions。
上述方法与 isElementPresent 配对也不错:
public bool isElementPresent(By selector)
{
return driver.FindElements(selector).Any();
}
或者那个:
public bool isElementPresent(By selector)
{
return driver.FindElements(selector).size()>0;
}
希望这对你有用