在捕获异常后阻止Selenium WebDriver退出

时间:2015-12-16 16:07:59

标签: java selenium selenium-webdriver

我正在使用Selenium Web Driver填写一个简单的表单:

private WebDriver driver = new FirefoxDriver();

功能:

public boolean fillDetailsInWeb(JsonElement data,String url){
        System.out.println("fill in-"+url);
        boolean result = false;
        try{
            driver.navigate().to(url);

        }catch(Exception e){
            System.out.println("Error in driver " + e.getMessage().toString());
            return result;
        }
        //web elements
        try{
            WebElement name_to_input = driver.findElement(By.id("ID1"));
            WebElement email_to_input =  driver.findElement(By.id("id2"));
            WebElement message_to_input = driver.findElement(By.id("ID3"));
        }catch(NoSuchElementException MSEE){
            MSEE.printStackTrace();
        }
        result = true;
        return result;
    }

我希望在抓取NoSuchElementException并将程序转到下一个站点后继续该过程。 这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

循环它不会继续下一步。

尝试首先确定哪个元素不存在或者每个步骤进行验证,例如:

    try{
        WebElement name_to_input = driver.findElement(By.id("ID1"));

    }catch(Exception MSEE){
        MSEE.printStackTrace();
    }
    try{
        WebElement name_to_input = driver.findElement(By.id("ID2"));

    }catch(Exception MSEE){
        MSEE.printStackTrace();
    }

String[] id = {"id1","id2"}

for(int c=0;c<2;c++)
   try{
        WebElement name_to_input = driver.findElement(By.id(id[c]));

    }catch(Exception MSEE){
        MSEE.printStackTrace();
    }

我只将NoSuchElementException更改为Exception,以便元素存在但不可见。硒仍然进入下一步。

我只是新手,但希望这可以提供帮助。

答案 1 :(得分:1)

正如标题所述,如果您希望即使发生意外异常也要继续执行,您还需要使用 The Finally Block 以及 Try...Catch... 阻止。

来自 this 链接:

当try块退出时,finally块始终执行。这确保即使发生意外异常也会执行finally块。但最终不仅仅是异常处理有用 - 它允许程序员避免因返回,继续或中断而意外绕过清理代码。将清理代码放在finally块中总是一种很好的做法,即使没有预期的例外情况也是如此。

所以你的Try Catch块最后会是:

...
try{
    driver.navigate().to(url);

}catch(Exception e){
    System.out.println("Error in driver " + e.getMessage().toString());
    return result;
}
//web elements
try{
    WebElement name_to_input = driver.findElement(By.id("ID1"));
    WebElement email_to_input =  driver.findElement(By.id("id2"));
    WebElement message_to_input = driver.findElement(By.id("ID3"));
}catch(NoSuchElementException MSEE){
    MSEE.printStackTrace();

} finally {
    return result;
}
...