通知(警报)在selenium webdriver中的应用程序中随机出现

时间:2016-06-16 04:57:34

标签: java selenium selenium-webdriver appium

我正在使用带有Java语言的selenium webdriver。我正面临一个问题,即通过应用程序随机出现通知警报。基本上这些警报有一些信息,因为它是功能。

当脚本执行其步骤时,屏幕上会突然显示这些警报,并且我的脚本会因警报消息而失败。

请提出您的建议,我们如何处理在任何窗口上随机出现的此类警报?

以下是我想要处理这种情况的两点:

  1. 我会检查警报是否出现在每一步(点击或之后) 其他行动)但它增加了我的执行时间。

  2. 有没有办法,我们会继续监控警报是否出现。如果     警报出现时只关闭警报,如果没有,则继续执行     脚本的步骤。

  3. 请建议处理此类警报的任何解决方法,以便我们的脚本不会失败。

    这与使用Appium工具自动化移动应用程序的情况相同,并且屏幕上突然出现任何广告。

    如果任何人提供java代码来处理这种类型的场景,那将是很好的。

    提前致谢!!

2 个答案:

答案 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();
            }
        }