由于尝试捕获而未执行其他条件

时间:2014-07-22 11:13:24

标签: java testing selenium selenium-webdriver webdriver

我有一个场景,当我们点击保存两个进程时就可以发生。它可以显示一些消息,否则页面可能会崩溃。我已经为崩溃添加了一个if条件,并且如果应用程序没有因为其他条件而崩溃,则提到了另一个进程。我编写了这样的代码来处理崩溃。

try {
    if (driver.findElement(By.xpath("/html/body/form/div[4]/div[3]/div[1]/div[1]/div[1]/span[1]")).isDisplayed()){
        System.out.println("Critical Error Occured.");
        driver.close();
    } else{
    String msg = driver.findElement(By.xpath("/html/body/form/div[4]/div[3]/div[1]/div[1]/div/div/div[1]/div/div[2]/div/div[1]/span")).getText();
    if (msg.equals("User already registered")){
        driver.findElement(By.name("dnn$ctr5995$View$btnOk")).click();
        System.out.println(msg);
        driver.close();
    } else if (msg.equals("Admission number already exist.")) {
        driver.findElement(By.name("dnn$ctr5995$View$btnOk")).click();
        System.out.println(msg);
        System.out.println("Please change the admission number.");
        driver.quit();          
    } else if (msg.equals("Saved Successfully.")){
        driver.findElement(By.name("dnn$ctr5995$View$btnOk")).click();
        System.out.println(msg);
    }
    }
}catch ( org.openqa.selenium.NoSuchElementException e){
    System.out.println("No Such Element Exception.");
}

由于页面很少崩溃,因此执行控件时会捕获,因此不会执行第一个if条件的else条件。对此有什么解决方案吗?

3 个答案:

答案 0 :(得分:4)

try-catch的各个部分中单独使用if块,或者使用finally块来表示您始终要执行的代码。

你有两个独立的问题,第一个是条件中的findElement。要处理这个问题,你需要单独进行查找,然后执行if。

Element elem = null
try {
    elem = driver.findElement(By.xpath("/html/body/form/div[4]/div[3]/div[1]/div[1]/div[1]/span[1]"));
} catch (org.openqa.selenium.NoSuchElementException e) {
    System.out.println("No Such Element Exception.");
}

然后你需要在else

中处理它
if (elem != null && elem.isDisplayed()){
    System.out.println("Critical Error Occured.");
    driver.close();
} else{
  try {
    String msg = driver.findElement(By.xpath("/html/body/form/div[4]/div[3]/div[1]/div[1]/div/div/div[1]/div/div[2]/div/div[1]/span")).getText();
    if (msg.equals("User already registered")){
        driver.findElement(By.name("dnn$ctr5995$View$btnOk")).click();
        System.out.println(msg);
        driver.close();
    } else if (msg.equals("Admission number already exist.")) {
        driver.findElement(By.name("dnn$ctr5995$View$btnOk")).click();
        System.out.println(msg);
        System.out.println("Please change the admission number.");
        driver.quit();          
    } else if (msg.equals("Saved Successfully.")){
        driver.findElement(By.name("dnn$ctr5995$View$btnOk")).click();
        System.out.println(msg);
    }
  } catch ( org.openqa.selenium.NoSuchElementException e){

  }
}

答案 1 :(得分:0)

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

可能你正在寻找finally子句,不是吗?

答案 2 :(得分:0)

最后一句可以解决你的问题。包含必须在Finally子句

中执行代码的最佳实践