Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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)_Java_Javascript_Firefox_Selenium - Fatal编程技术网

Java 未处理的警报异常:存在模式对话框(Selenium)

Java 未处理的警报异常:存在模式对话框(Selenium),java,javascript,firefox,selenium,Java,Javascript,Firefox,Selenium,我正面临一个问题,其中我得到一个异常,说未处理的AlertException模态对话框存在,下面是一些跟踪 org.openqa.selenium.UnhandledAlertException:出现模式对话框: 此页面要求您确认是否要将数据保留给您 可能无法保存已输入的。生成信息:版本:“2.41.0”,修订版: “3192D8A6C4449DC285928BA024793444F5423C58”,时间:“2014-03-27 11:29:39'系统信息:主机:'NCESEPBLRNRE16'

我正面临一个问题,其中我得到一个异常,说未处理的AlertException模态对话框存在,下面是一些跟踪

org.openqa.selenium.UnhandledAlertException:出现模式对话框: 此页面要求您确认是否要将数据保留给您 可能无法保存已输入的。生成信息:版本:“2.41.0”,修订版: “3192D8A6C4449DC285928BA024793444F5423C58”,时间:“2014-03-27 11:29:39'系统信息:主机:'NCESEPBLRNRE16',ip:'172.16.137.213', os.name:'Windows XP',os.arch:'x86',os.version:'5.1', java.version:'1.6.0_26'会话ID: bda22089-a586-4cd8-b7ac-778C98581E11驾驶员信息: org.openqa.selenium.firefox.FirefoxDriverCapabilities[{platform=XP, acceptSslCerts=true,javascriptEnabled=true,browserName=firefox, rotatable=false,locationContextEnabled=true,version=23.0, CSSSelectorEnabled=true,databaseEnabled=true,handlesAlerts=true, browserConnectionEnabled=true,nativeEvents=false, WebStorage Enabled=true,applicationCacheEnabled=true, takesScreenshot=true}]at sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:513) org.openqa.selenium.remote.ErrorHandler.CreateTrowable(ErrorHandler.java:193) 在 org.openqa.selenium.remote.ErrorHandler.CreateUnhandleAlertException(ErrorHandler.java:174) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:141) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:595) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:348) 在 org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:389) 位于org.openqa.selenium.By$ById.findElement(By.java:214) org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:340) 在 com.amadeus.selenium.runner.sepWebDriverRapper.findelelement(sepWebDriverRapper.java:141)

我搜索了一些解决方案,得到了下面的代码片段来处理这个问题

//现在警报出现了。Alert Alert=驱动程序.switchTo().Alert(); alert.accept()

它工作正常,但警报弹出窗口出现在不同的实例(或不同的场景)中,对于这些实例(或场景),无法在所有代码块中处理警报

请告诉我是否有任何常用方法,我可以通过一些firefox配置文件设置或任何其他通用方法永久禁用此警报弹出窗口


我将Selenium Java与Firefox浏览器一起使用

编写如下方法:

protected boolean isAlertPresent() {
        try {
          driver.switchTo().alert();
          return true;
        } catch (NoAlertPresentException e) {
          return false;
        }
      }
调用上述方法验证是否存在警报,如下所示:

if(isAlertPresent()){
            System.out.println(isAlertPresent());
            driver.switchTo().alert().accept();
        }

这可以通过使用Robot类和selenium Alert switch to command的组合来解决

driver.switchTo().alert();
// invoke Robot class
Robot rb = new Robot();
rb.KeyPress(KeyEvent.VK_ENTER);
rb.KeyPress(KeyRelease.VK_ENTER);

试试这个,如果有任何问题,请告诉我。它对我有效,因为我之前遇到过这个问题。

我建议按照预期的行为处理警报,而不是到处禁用警报。感谢您的回复,但问题是AlertPopup的出现并不总是在同一个实例中,我想到了firefoxprofile永久禁用它的任何设置,就像下载窗口一样,你知道什么时候会出现警报,什么时候不会?这是你的网站,对吗?你知道应用程序实际做了什么,对吗?我看到警报弹出出现在不同的场景中,尽管我能够在一个实例中使用alert alert=driver.switchTo().alert()处理警报;alert.accept()。所以为了确保它不会出现在不同的场景中,我觉得如果我们永久禁用它会更好。这就是我询问是否有永久禁用ITI的原因。如果您对现有的accept alert代码使用try/catch,然后不执行任何操作,则会尝试在需要的任何位置关闭弹出窗口,但如果弹出窗口不存在,则测试不会出错。这不是最好的做法,但取决于你打算做什么。我尝试过,但仍然得到
org.openqa.selenium.unhandleAlertException:Modal对话框。你在哪里编写了第一个方法(isAlertPresent())?在同一个班级还是在不同的班级?如果您在同一类中编写,请使用private或public而不是protected。