selenium webdriver modal dialog java

selenium webdriver modal dialog java

本文关键字:java dialog modal webdriver selenium      更新时间:2023-09-26

我正在测试我的表单,当我不输入所需的数据时,我会在我的Web应用程序中收到javascript警报,告诉用户输入丢失的数据。我无法用硒处理这个问题,因为当我部分填写表格并尝试提交时,我得到异常

org.openqa.selenium.UnhandledAlertException: Modal dialog present

如果我发现异常,则不会显示网络驱动程序中的警报。这是解决此问题的任何解决方案吗?我希望能够提交表格并捕获警报。我正在使用Linux Mint,Firefox 18和Selenium 2.28.0与java此致敬意更新我的代码中有以下内容

somePage.fillName(sth); //only 1 of 2 required field are filled
somgePage.submit(); //here js alert is shown right after clicking submit
somePage.getCurrentAlert();
//here are code parts
public Alert getCurrentAlert(){
    return driver.switchTo().alert();
}
public AdminHome submit(){
        saveUrl();
        WebElement submit = driver.findElement(By.id("add_quiz_submit_button"));
        try{
            submit.click();
            if(urlChanged()){
                return new AdminHome(driver);
            }
        }
        catch(Exception e){
            e.printStackTrace();// exception 1
            return null;
        }
        return null;
    }
//Exception 1
org.openqa.selenium.UnhandledAlertException: Modal dialog present
//The test fails because of:
org.openqa.selenium.NoAlertPresentException: No alert is present (WARNING: The server did not provide any stacktrace information)

但是,如果我按预期单击手动提交测试工作。提前致谢

应在

操作完成后立即处理警报,并且在处理警报之前不应有任何其他操作。

例如,您的代码应该是

 try{
        submit.click();
        if (alertPresent())
            getCurrentAlert();
        if(urlChanged()){
            return new AdminHome(driver);
        }
    }

这将检查警报,然后接受警报。Web驱动程序的交互更类似于我们与浏览器手动交互的操作。因此,当单击提交完成后,我们将能够看到警报,并且在接受或拒绝它之前无法执行任何操作。

维沙尔

这是因为当引发UnhandledAlertException时,驱动程序本身接受警报。如果您部分填写了表格,如何提交表格?

如果可能的话,只需捕获该异常,并在 catch 块中写入单击提交按钮的行。

使用机器人类(按回车键)关闭模式对话框

 try {
        (new Robot()).keyPress(java.awt.event.KeyEvent.VK_ENTER);
         (new Robot()).keyRelease(java.awt.event.KeyEvent.VK_ENTER);
         } catch (AWTException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }