Selênio - Tratamento de exceções

Quando estamos desenvolvendo testes, devemos garantir que os scripts possam continuar sua execução mesmo se o teste falhar. Uma exceção inesperada seria lançada se os piores cenários não fossem tratados adequadamente.

Se ocorrer uma exceção devido a um elemento não encontrado ou se o resultado esperado não corresponder aos reais, devemos capturar essa exceção e encerrar o teste de maneira lógica, em vez de encerrar o script abruptamente.

Sintaxe

O código real deve ser colocado no bloco try e a ação após a exceção deve ser colocada no bloco catch. Observe que o bloco 'finalmente' é executado independentemente de o script ter lançado uma exceção ou NÃO.

try {
   //Perform Action
} catch(ExceptionType1 exp1) {
   //Catch block 1
}  catch(ExceptionType2 exp2) {
   //Catch block 2
} catch(ExceptionType3 exp3) {
   //Catch block 3 
} finally {
   //The finally block always executes.
}

Exemplo

Se um elemento não for encontrado (por algum motivo), devemos sair da função sem problemas. Portanto, sempre precisamos ter um bloco try-catch se quisermos sair suavemente de uma função.

public static WebElement lnk_percent_calc(WebDriver driver)throws Exception {
   try {
      element = driver.findElement(By.xpath(".//*[@id='menu']/div[4]/div[3]/a")); 
      return element;
   } catch (Exception e1) {
      // Add a message to your Log File to capture the error
      Logger.error("Link is not found.");
      
      // Take a screenshot which will be helpful for analysis.
      File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
      FileUtils.copyFile(screenshot, new File("D:\\framework\\screenshots.jpg"));
      throw(e1);
   }
}