Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通知(警报)在selenium webdriver的整个应用程序中随机出现_Java_Selenium_Selenium Webdriver_Appium - Fatal编程技术网

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

Java 通知(警报)在selenium webdriver的整个应用程序中随机出现,java,selenium,selenium-webdriver,appium,Java,Selenium,Selenium Webdriver,Appium,我正在使用SeleniumWebDriver和Java语言。我面临一个问题,通知警报在整个应用程序中随机出现。基本上,这些警报有一些信息,因为它是功能性的 当脚本执行其步骤时,这些警报突然出现在屏幕上,我的脚本将由于警报消息而失败 请给出您的建议,我们如何处理随机出现在任何窗口上的此类警报? 以下是我想到的处理这种情况的两点: 我将在每一步(单击或之后)检查警报是否出现 其他动作)但这会增加我的执行时间 有没有办法,我们会一直监控警报是否出现。如果 警报出现,如果没有,请关闭警报,然后继续执行

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

当脚本执行其步骤时,这些警报突然出现在屏幕上,我的脚本将由于警报消息而失败

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

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

  • 我将在每一步(单击或之后)检查警报是否出现 其他动作)但这会增加我的执行时间

  • 有没有办法,我们会一直监控警报是否出现。如果 警报出现,如果没有,请关闭警报,然后继续执行 脚本的步骤

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

    这与我们使用Appium工具自动化移动应用程序的场景相同,突然任何广告都出现在屏幕上

    如果有人提供java代码来处理这种类型的场景,那就太好了


    提前谢谢

    如果您希望在
    脚本执行过程中不出现不必要的警报,您可以
    覆盖
    您的
    警报
    功能,然后使用
    JavaScriptExecutor
    执行
    脚本,如下所示:-

    JavascriptExecutor executor = (JavascriptExecutor)driver
    executor.executeScript("window.alert = function () { return true}");
    
    WebDriverWait wait = new WebDriverWait(driver, 100);
    wait.until(ExpectedConditions.alertIsPresent());
    Alert alert = webDriver.switchTo().alert();
    
    每次加载页面时,都可以执行此
    脚本
    。此
    脚本
    将覆盖您的
    警报
    功能,警报将永远不会发生

    我建议您在测试不依赖于
    alert
    时运行此脚本,因为执行此脚本后,
    alert
    将不会显示在页面上

    除此之外,您还可以按如下方式处理
    警报
    :-

    JavascriptExecutor executor = (JavascriptExecutor)driver
    executor.executeScript("window.alert = function () { return true}");
    
    WebDriverWait wait = new WebDriverWait(driver, 100);
    wait.until(ExpectedConditions.alertIsPresent());
    Alert alert = webDriver.switchTo().alert();
    
    现在,如果要接受警报,可以使用:-

    alert.accept();
    
    alert.dismiss();
    
    对于“取消”,您可以使用:-

    alert.accept();
    
    alert.dismiss();
    
    注意:-如果使用
    WebDriverWait
    未出现警报,它将抛出
    TimeoutException
    。。所以你需要处理它

    已编辑..

    对于解决此问题的
    Appium
    自动化,您可以使用专门设计用于处理这些警报的所需功能

    您可以始终使用以下所需功能接受或解除警报:-

    autoAcceptAlerts = true
    ...
    capabilities.SetCapability("autoAcceptAlerts", true);
    

    此外,
    Appium
    的一些旧版本尚未使用此解决方案,因此您可能希望尝试以下解决方案:-

    driver.SwitchTo().Alert().Accept();
    
    欲了解更多信息,请点击


    希望它能帮助您:)

    如果您希望在
    脚本执行过程中不出现不必要的警报,您可以
    覆盖
    您的
    警报
    功能,然后使用
    JavaScriptExecutor
    执行
    脚本,如下所示:-

    JavascriptExecutor executor = (JavascriptExecutor)driver
    executor.executeScript("window.alert = function () { return true}");
    
    WebDriverWait wait = new WebDriverWait(driver, 100);
    wait.until(ExpectedConditions.alertIsPresent());
    Alert alert = webDriver.switchTo().alert();
    
    每次加载页面时,都可以执行此
    脚本
    。此
    脚本
    将覆盖您的
    警报
    功能,警报将永远不会发生

    我建议您在测试不依赖于
    alert
    时运行此脚本,因为执行此脚本后,
    alert
    将不会显示在页面上

    除此之外,您还可以按如下方式处理
    警报
    :-

    JavascriptExecutor executor = (JavascriptExecutor)driver
    executor.executeScript("window.alert = function () { return true}");
    
    WebDriverWait wait = new WebDriverWait(driver, 100);
    wait.until(ExpectedConditions.alertIsPresent());
    Alert alert = webDriver.switchTo().alert();
    
    现在,如果要接受警报,可以使用:-

    alert.accept();
    
    alert.dismiss();
    
    对于“取消”,您可以使用:-

    alert.accept();
    
    alert.dismiss();
    
    注意:-如果使用
    WebDriverWait
    未出现警报,它将抛出
    TimeoutException
    。。所以你需要处理它

    已编辑..

    对于解决此问题的
    Appium
    自动化,您可以使用专门设计用于处理这些警报的所需功能

    您可以始终使用以下所需功能接受或解除警报:-

    autoAcceptAlerts = true
    ...
    capabilities.SetCapability("autoAcceptAlerts", true);
    

    此外,
    Appium
    的一些旧版本尚未使用此解决方案,因此您可能希望尝试以下解决方案:-

    driver.SwitchTo().Alert().Accept();
    
    欲了解更多信息,请点击


    希望它能帮助您:)

    无论您在哪里收到警报,都可以调用此方法。此方法将接受警报

    public void checkAlert(){
                if(ExpectedConditions.alertIsPresent() != null){
                    driver.switchTo().alert().accept();
                }
            }
    

    无论您在何处获得警报,都可以调用此方法。此方法将接受警报

    public void checkAlert(){
                if(ExpectedConditions.alertIsPresent() != null){
                    driver.switchTo().alert().accept();
                }
            }
    

    你对这个网站没有控制权,是吗?您的第一个解决方案似乎很好。编写一个类方法来检查警报并将其关闭,我怀疑它会大量增加执行时间。一件简单的事情是,在try-catch中放置警报可见性的条件代码……您能检查是否有方法阻止警报发生吗?因为在每一步添加验证都会增加时间并降低应用程序的速度。您无法控制此网站,是吗?您的第一个解决方案似乎很好。编写一个类方法来检查警报并将其关闭,我怀疑它会大量增加执行时间。一件简单的事情是,在try-catch中放置警报可见性的条件代码……您能检查是否有方法阻止警报发生吗?因为在每一步添加验证都会增加时间,并且会减慢应用程序的运行速度。请大家多多指教!!我还有一个问题,我正在使用appium自动化移动应用程序。屏幕上也出现了随机广告,你有什么办法处理它吗!!您应该使用
    capabilities.SetCapability(“autoacceptlerts”,true)用于始终接受警报或
    功能。SetCapability(“autoDismissAlerts”,true)用于始终未命中警报..有关更多信息,请访问此链接。。。。谢谢你的建议!!我还有一个问题,我正在使用appium自动化移动应用程序。屏幕上也出现了random adv,你有什么办法处理它吗