我正在使用Selenium和Web Driver。
我有一个表格可以装在灯箱里。现在,当我点击"提交"。 Light Box关闭后,页面顶部会生成一个简单的通知,几秒后就会消失。
现在我的问题是:当我做的时候
driver.findElement(By.xpath(".//*[@id='createCaseBtn']")).click(); // x-path of submit button
如何检查UI上是否显示该通知消息。
因为当我做的时候
driver.findElement(By.xpath(".//*[@id='easyNotification']")).getText(); // x-path of easyNotification message
我告诉我,无法找到逻辑上正确的元素,因为那时UI上没有通知消息。只有在完成AJAX请求(对于表单的子目录)之后,才会在UI上显示消息。
请帮助!!!!
由于
答案 0 :(得分:3)
使用过显式等待。它对我来说很好:
显式等待是您定义的代码,用于在进一步执行代码之前等待某个条件发生。最糟糕的情况是Thread.sleep(),它将条件设置为等待的确切时间段。提供了一些便捷方法,可帮助您编写仅在需要时等待的代码。 WebDriverWait与ExpectedCondition相结合是一种可以实现的方法。
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.id(".//*[@id='easyNotification']")));
答案 1 :(得分:0)
好。当我处理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();
来自流利等待的文档: 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;
}
希望这适合你