【问题标题】:How to handle back to back alerts on selenium webdriver automation如何处理 selenium webdriver 自动化的背靠背警报
【发布时间】:2018-01-03 18:13:23
【问题描述】:

场景:

  • 执行单击时 -> 显示 Alert1
  • 在接受 Alert1 时 -> 显示 Alert2

我能够接受 alert1,但是当我编写代码来处理 alert2 时,也不会接受任何警报。 尝试了与 Google 不同的方法,但没有任何效果

与 thread.sleep 和 wait 等不同的组合,但没有任何效果。

代码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 

【问题讨论】:

  • 和你的代码??
  • //代码1:Alert alert = driver.switchTo().alert();线程.sleep(5000);警报.accept(); // 对于 Alert1 Thread.sleep(5000);警报.accept(); // 对于 alert2 //代码 2 警报 alert = driver.switchTo().alert();线程.sleep(5000);警报.accept(); // 对于 Alert1 driver.switchTo().defaultContent();切换到帧(0);警报 alert1 = driver.switchTo().alert();线程.sleep(5000); //测试alert1.accept(); // 对于alert2
  • 如果你把它放在你的帖子上就好了
  • 我是新用户,因在 Post 上添加代码的格式问题而停止

标签: java selenium-webdriver alerts


【解决方案1】:

根据评论中的代码(由于 java cmets 很难阅读发生了什么),您可以尝试这样的事情:

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
}

不要认为你真的需要等待,但它在演示中。

【讨论】:

  • 它现在工作了。我想知道昨天是什么问题。非常感谢你。欣赏它..因为过去 3-4 天我一直在挣扎:)
  • @pratap88bhanu,很高兴为您提供帮助。如果您不介意,您可以将答案标记为正确吗?
【解决方案2】:

每个警报都是一个单独的实体,因此您不能获得第一个,然后.accept() 两次。第二个代码块不起作用的事实使我认为您可能需要在关闭第一个代码块后稍等片刻才能出现第二个代码块。我会写这样的。

WebDriverWait wait = new WebDriverWait(driver, 3);
wait.until(ExpectedConditions.alertIsPresent()).accept();
wait.until(ExpectedConditions.alertIsPresent()).accept();

wait 返回等待的内容...在本例中为 Alert 实例,因此您可以链接 .accept()。这也可以在第二个实例中重复。


我忘了提......你不应该需要所有这些睡眠,无论如何它们都是一种不好的做法。您可以进行一些谷歌搜索和阅读以获取有关原因的所有详细信息。请改用WebDriverWait

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2012-01-04
    • 2015-12-16
    • 2015-03-06
    相关资源
    最近更新 更多