场景:
我能够接受alert1,但是当我编写代码来处理alert2时,也没有接受任何警报。尝试与谷歌不同,但没有任何作用
与thread.sleep和等等的不同组合,但没有任何作用。
代码1:
Alert alert = driver.switchTo().alert();
Thread.sleep(5000);
alert.accept(); // For Alert1
Thread.sleep(5000);
alert.accept(); // For alert2
代码2:
Alert alert = driver.switchTo().alert();
Thread.sleep(5000);
alert.accept(); // For Alert1
driver.switchTo().defaultContent();
Switchtoframe(0);
Alert alert1 = driver.switchTo().alert();
Thread.sleep(5000); //test
alert1.accept(); // For alert2
根据评论中的代码(很难阅读由于java评论而发生的事情),您可以尝试这样的事情:
wait = new WebDriverWait(driver, 10);
try {
wait.until(ExpectedConditions.alertIsPresent());
Alert alert1 = driver.switchTo().alert();
Thread.sleep(5000);
alert1.accept();
} catch (Exception e) {
// No alert exists
}
try {
wait.until(ExpectedConditions.alertIsPresent());
Alert alert2 = driver.switchTo().alert();
Thread.sleep(5000);
alert2.accept();
} catch (Exception e) {
// No alert exists
}
不要以为你真的需要等待,但这是在演示中。
每个警报都是一个单独的实体,所以你不能得到第一个,然后.accept()
它两次。第二个代码块不起作用的事实使我认为你可能需要在解除第一个代码块出现后的短暂等待。我会写这样的东西。
WebDriverWait wait = new WebDriverWait(driver, 3);
wait.until(ExpectedConditions.alertIsPresent()).accept();
wait.until(ExpectedConditions.alertIsPresent()).accept();
wait
返回等待的东西......在这种情况下Alert
实例,所以你可以链接.accept()
。对于第二个实例也可以重复这一点。
我忘了提到......你不应该需要所有的睡眠,无论如何它们都是不好的做法。你可以做一些谷歌搜索和阅读,以获得有关原因的所有细节。请改用WebDriverWait
。