Selenium WebDriver:关闭连续弹出/警报

Posted

技术标签:

【中文标题】Selenium WebDriver:关闭连续弹出/警报【英文标题】:Selenium WebDriver: Closing Consecutive PopUp/Alerts 【发布时间】:2019-03-12 18:02:30 【问题描述】:

网址:https://www.guru99.com/alert-popup-handling-selenium.html

测试页面:http://demo.guru99.com/test/delete_customer.php

从测试页面,

1) 在customer id 字段中输入数字

2) 点击Submit按钮

3) 使用

在警报消息中单击“确定”
driver.switchTo().alert().accept();

4) 关闭下一个提示“客户成功删除!”

第 4 步:我无法使用

driver.switchTo().alert().dismiss(); 

就像我之前做的那样。

我需要关于如何关闭连续弹出警报的帮助?

编辑:我正在使用 Java

【问题讨论】:

How wait for alert box to perform the action in Selenium?的可能重复 【参考方案1】:

如果您在提交后看到浏览器正在刷新。

所以使用延迟来确保警报已加载:

WebDriverWait(browser, 4).until(EC.alert_is_present())

然后使用

 alert = browser.switch_to.alert
 alert.accept()

接受警报,即按“确定”

【讨论】:

此链接显示如何向 java ***.com/questions/12858972/… (or) toolsqa.com/selenium-webdriver/wait-commands (or) guru99.com/implicit-explicit-waits-selenium.html 添加延迟【参考方案2】:

您需要等待一段时间并检查警报是否存在?因为一旦您接受了第一个警报,页面就会被加载。

下面是有效的 Java 代码:

// Launching the browser and Navigating to the given URL
driver.get("http://demo.guru99.com/test/delete_customer.php");

// Locating the Customer ID field and Sending the text
WebElement customerID = driver.findElement(By.name("cusid"));
customerID.sendKeys("Something");

// Locating the Submit and Clicking on it
WebElement submit = driver.findElement(By.name("submit"));
submit.click();

// Switching to the first alert and Printing the alert text and Accepting the alert
Alert alert = driver.switchTo().alert();
System.out.println("=> The alert text is : "+alert.getText());
alert.accept();

// Using the WebDriverWait to wait until the alert is displayed
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.alertIsPresent());

// Once the alert is displayed, switching to that alert and Dismissing it
alert = driver.switchTo().alert();
System.out.println("=> An another alert text is : "+alert.getText());
alert.dismiss();

希望对你有帮助……

【讨论】:

【参考方案3】:

不确定是否是这种情况,但我刚刚遇到了类似的问题,我正在发布解决方案,因为您的问题会出现在 Google 搜索结果中。如果您要测试的警报立即出现,一个接一个,如下所示:

alert('foo');
alert('bar');

...并且您可以控制服务器端 javascript 代码,您应该将它们分开,例如:

alert('foo');
setTimeout(function()alert('bar');, 500);

这样,WebDriver 将能够区分这些警报框。

【讨论】:

以上是关于Selenium WebDriver:关闭连续弹出/警报的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium WebDriver 处理登录弹出窗口?

史上最强大的python selenium webdriver的包装

如何使用 Selenium WebDriver 和 Java 处理日历弹出窗口?

如何在 selenium webdriver(python)中禁用 chrome 的“保存密码”弹出窗口

如何使用 Java 处理 Selenium WebDriver 的身份验证弹出窗口

如何在 python 中的 selenium webdriver 中禁用 chrome 通知弹出窗口