Selenio - Gestione delle eccezioni

Quando sviluppiamo test, dobbiamo assicurarci che gli script possano continuare la loro esecuzione anche se il test fallisce. Se gli scenari peggiori non vengono gestiti correttamente, verrà generata un'eccezione imprevista.

Se si verifica un'eccezione a causa di un elemento non trovato o se il risultato atteso non corrisponde ai valori effettivi, dovremmo intercettare tale eccezione e terminare il test in modo logico piuttosto che terminare bruscamente lo script.

Sintassi

Il codice effettivo dovrebbe essere inserito nel blocco try e l'azione dopo l'eccezione dovrebbe essere inserita nel blocco catch. Si noti che il blocco "finalmente" viene eseguito indipendentemente dal fatto che lo script abbia generato un'eccezione o meno.

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.
}

Esempio

Se un elemento non viene trovato (per qualche motivo), dovremmo uscire dalla funzione senza problemi. Quindi abbiamo sempre bisogno di un blocco try-catch se vogliamo uscire senza problemi da una funzione.

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);
   }
}