问题描述
public class classtest {
WebDriver webDriver;
webdriverwait wait;
ExpectedCondition<Boolean> pageLoadCondition = new
ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor) driver)
.executeScript("return document.readyState")
.equals("complete");
}
};
@BeforeEach
public void init() {
webDriver = new FirefoxDriver();
wait = new webdriverwait(webDriver,10);
}
@AfterEach
public void quit() {
webDriver.quit();
}
@Test
public void Test1() {
...
}
@nested
class classtest2 {
@BeforeEach
public void create() {
...
}
@AfterEach
public void closeAlert() {
webDriver.get("https://...");
...
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
webDriver.switchTo().alert().accept();
}
@Test
public void Test2() {
...
}
...
当 Test2()
完成时,执行 closeAlert()
方法。
页面上会显示警报,但 accept()
有 50% 的时间会触发。我的猜测是它没有时间触发,因为 quit()
方法会立即执行,从而关闭浏览器。
我在收到警报后尝试了wait.until(pageLoadCondition);
,但没有用。
如何等待警报确认完成?
解决方法
您可以等待实际的 WebElement 显示/等等...在网页上。
如果您没有特定元素,则可以使用几毫秒的 Thread.sleep
。
可能不是理想的解决方案,但只要您只需要等待,别无其他,它应该可以解决问题。