验证是否弹出了警报窗口,但没有引发异常

时间:2017-03-24 20:46:52

标签: selenium selenium-webdriver

我正在尝试验证警报窗口的存在然后接受它。使用下面的代码执行此操作时,当没有警报窗口时,它会导致抛出异常,这是不需要的,因此要求修改代码。

public void acceptIfAlertPresent()
{
    driver.sleep(2000);
    try{
        if(driver.switchTo().alert() != null){
            String alertMessage=driver.switchTo().alert().getText();
            try
            {   
                driver.switchTo().alert().accept();
            }
            catch (StackOverflowError e)
            {
                 driver.switchTo().alert().accept();                 
            }
            resultMap.putOutput("MessageOnAlertWindow", alertMessage);
        }
    }catch(Exception e){
    }
}

如何修改我的方法?几乎所有时间,异常都是从最外面的catch块抛出的

3 个答案:

答案 0 :(得分:0)

在外部finally语句后添加catch(Exception e)块。始终执行finally块,即使抛出异常也是如此。在finally块中,您无能为力,该方法将安全退出而不是抛出异常。

答案 1 :(得分:0)

如果要处理警报的对象,如果显示..我想我们可以像下面那样做

//chrome
    System.setProperty("webdriver.chrome.driver", "E:\\selenium_setups\\01112017\\chromedriver.exe");
    WebDriver driver=new ChromeDriver();
    driver.get("http://www.seleniumhq.org/");

    try{
        String alertText=driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
        //any other stuff
    }catch(Exception e){
        System.out.println("exception handled "+e.getMessage());
    }

    System.out.println("after try and catch");

答案 2 :(得分:0)

试试这个,当没有提醒窗口时,它不会抛出任何错误:

try {
    WebDriverWait waitAlert = new WebDriverWait(wb, 30);
    waitAlert.until(ExpectedConditions.alertIsPresent());
    wb.switchTo().alert().accept();
    }
     catch (Exception e) {
        logger.info("Alert Didn't Come");
    }