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 的“保存密码”弹出窗口