我正在使用带有Java语言的selenium webdriver。我正面临一个问题,即通过应用程序随机出现通知警报。基本上这些警报有一些信息,因为它是功能。
当脚本执行其步骤时,屏幕上会突然显示这些警报,并且我的脚本会因警报消息而失败。
请提出您的建议,我们如何处理在任何窗口上随机出现的此类警报?
以下是我想要处理这种情况的两点:
我会检查警报是否出现在每一步(点击或之后) 其他行动)但它增加了我的执行时间。
有没有办法,我们会继续监控警报是否出现。如果 警报出现时只关闭警报,如果没有,则继续执行 脚本的步骤。
请建议处理此类警报的任何解决方法,以便我们的脚本不会失败。
这与使用Appium工具自动化移动应用程序的情况相同,并且屏幕上突然出现任何广告。
如果任何人提供java代码来处理这种类型的场景,那将是很好的。
提前致谢!!
答案 0 :(得分:2)
如果您希望在script
执行期间不显示不必要的提醒,则可以override
alert
功能执行script
之前使用JavaScriptExecutor
JavascriptExecutor executor = (JavascriptExecutor)driver
executor.executeScript("window.alert = function () { return true}");
如下: -
script
每次加载页面时,您都可以执行此script
次。此alert
将覆盖您的alert
功能,并且警报永远不会发生。
如果您的测试不依赖于alert
,我建议您运行此脚本,因为执行此脚本后,alert
将不会显示在页面上。
除了你可以处理WebDriverWait wait = new WebDriverWait(driver, 100);
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = webDriver.switchTo().alert();
之外,如下所示: -
alert.accept();
现在,如果您想接受提醒,可以使用: -
alert.dismiss();
对于取消,您可以使用: -
WebDriverWait
注意: - 如果使用TimeoutException
不存在警报,则会抛出Appium
..所以您需要处理它。
<强>被修改.. 强>
要使autoAcceptAlerts = true
...
capabilities.SetCapability("autoAcceptAlerts", true);
自动化解决此问题,您可以使用专门设计用于处理这些警报的所需功能。
您可以始终接受或始终忽略具有以下所需功能的警报: -
autoDismissAlerts = true
...
capabilities.SetCapability("autoDismissAlerts", true);
或
Appium
此外,某些较早版本的driver.SwitchTo().Alert().Accept();
尚未使用此解决方案,因此您可能需要尝试一个小的解决方法: -
$(window).on('hashchange', function(e){
window.history.pushState("", document.title, window.location.pathname);
// do something...
});
有关详细信息,请点击this
希望它会对你有所帮助.. :)
答案 1 :(得分:0)
您可以在获取警报的任何地方调用此方法。此方法将接受警报。
public void checkAlert(){
if(ExpectedConditions.alertIsPresent() != null){
driver.switchTo().alert().accept();
}
}