如何处理 selenium webdriver 自动化的背靠背警报

Posted

技术标签:

【中文标题】如何处理 selenium webdriver 自动化的背靠背警报【英文标题】:How to handle back to back alerts on selenium webdriver automation 【发布时间】: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 上添加代码的格式问题而停止 【参考方案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

【讨论】:

以上是关于如何处理 selenium webdriver 自动化的背靠背警报的主要内容,如果未能解决你的问题,请参考以下文章

在 Selenium Webdriver 如何处理这种包含复选框的多选下拉列表

WebDriver中如何处理Iframe 及 嵌套Iframe

Selenium 如何处理多层嵌套 iframe

如何处理 Selenium 中的打印对话框?

python3 selenium 如何处理异常情况

robot framework + selenium 如何处理此类的下拉框 如何选中下拉框里的值