Handling Exceptions Using Exception Handling Framework in Selenium Scripts – Selenium Tutorial #19

In last WebDriver tutorial, we learned about 3 different types of important web elements like Web Tables, Frames and Dynamic elements and their handling mechanisms in selenium script

Before moving ahead with Framework tutorials in this Selenium training series, here in this tutorial we will learn about types of exceptions and how to handle exceptions in Java and Selenium scripts. Developers/testers use exception handling framework to handle an exception in selenium scripts.

Exception handling in Selenium 2

Example: When selenium script fails due to the wrong locator, then the developer should be able to understand the reason for failure and this can be achieved easily if the exception is handled properly in the program.

Below we have described the types of exceptions and the different ways how we can use exception handling framework in selenium scripts.

Exceptions are events due to which java program ends abruptly without giving expected output. Java provides a framework where a user can handle exceptions.

There are three kinds of exceptions:

  1. Checked Exception
  2. Unchecked Exception
  3. Error

The class hierarchy of exception and error:

Exception handling in Selenium

#1) Checked Exception: Checked exception is handled during compile time and it gives the compilation error if it is not caught and handled during compile time.

Example: FileNotFoundException, IOException etc.

#2) Unchecked Exception: In case of the unchecked exception, a compiler does not mandate to handle. The compiler ignores during compile time.

Example: ArrayIndexoutOfBoundException

#3) Error: When a scenario is fatal and the program cannot recover then JVM throws an error. Errors cannot be handled by the try-catch block. Even if the user tries to handle the error by using Try catch block, it cannot recover from the error.

Example: Assertion error, OutOfMemoryError etc.

Exception handling:

Try and Catch block:

try-catch blocks are generally used to handle exceptions. Type of exceptions is declared in catch block which is expected to come. When an exception comes in try block, immediately control moves to catch block.

Example:

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
         ie.printStackTrace();
    }

There can be multiple catch blocks for one try block depending upon the type of exception.

Example:

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    } catch(FileNotFoundException file){
      file.printStackTrace();
    }

throws Exception:

throws keyword in java is used to throw an exception rather than handling it. All checked exceptions can be thrown by methods.

Example:

public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("Data"));
     while ((line = br.readLine()) != null)
         {
           System.out.println(line);
         }
}

finally block:

finally, block executes irrespective of execution of try-catch block and it executes immediately after try/catch block completes.

Basically file close, database connection etc. can be closed in finally block.

Example:

try {
    br = new BufferedReader(new FileReader("Data"));
    } catch(IOException ie)
    {
      ie.printStackTrace();
    }
Finally {
          br.close();
        }

In the above example, BufferReader stream is closed in finally block. br.close() will always execute irrespective of execution of try and catch block.

Note: finally block can exist without any catch block. It is not necessary to have a catch block always.

There can be many catch blocks but only one finally block can be used.

Throwable: Throwable is parent class for error and exception. Generally it is difficult to handle errors in java. If a programmer is not sure about the type of error and exception, then it is advised to use the Throwable class which can catch both error and exception.

Example:

try {
   br = new BufferedReader(new FileReader("Data"));
     } catch (Throwable t)
     {
       t.printStackTrace();
     }

Exceptions in Selenium WebDriver:

Selenium has its own set of exceptions. While developing selenium scripts, a programmer has to handle or throw those exceptions. Below are few examples of exceptions in selenium.

Examples:

ElementNotVisibleException: If selenium tries to find an element but element is not visible within page

NoAlertPresentException: If a user tries to handle an alert box but the alert is not present.

NoSuchAttributeException: While trying to get attribute value but the attribute is not available in DOM.

NoSuchElementException: This exception is due to accessing an element which is not available on the page.

WebDriverException: Exception comes when a code is unable to initialize WebDriver.

Conclusion:

Exception handling is the essential part of every java program as well as selenium script. We can build robust and optimal code by handling an exception in smart ways. And it is also a best practice to handle exceptions in a script which will give you a better report when a program fails due to any reason.

Here we have tried to cover the process and framework of exception handling which is required to be implemented in selenium scripts.

Remember it is not mandatory to always handle the exception in a try-catch block. You can also throw an exception depending upon the requirement in a script.

Next Tutorial #20: In the upcoming tutorial, we would discuss about the various types of testing frameworks available. We would also study about the pros and cons of using a fledged framework approach in automation testing. We would discuss in detail about the Test data driven framework.

Please post your queries, related to handling exception in Selenium WebDriver, if you have any.

21 Comments on “Handling Exceptions Using Exception Handling Framework in Selenium Scripts – Selenium Tutorial #19

  1. Can we have a session on fitnesse+selenium+Eclipse . Please
    Thanks

  2. In try and catch block if error occurred then it will be handle in catch block but what about happen if we can used throws ?

  3. Hi very useful.
    Can you share some simple usage examples of sleneium exceptions mentioned in the end?

  4. Hi Keyur,throws will be used when you dont want to handle any error.Lets say you are you want to find an element in webpage but the element is not shown for some reason.In this case you may not want your code to fail because element is not available.So in this case you can catch the exception and navigate again to the elemnet.If you want to fail the testcase in first time if you dont find the element then use throwd.It will come out of the programme.

  5. Supriya.Hope this example solves your doubt.
    public class elementNotfoundExample {

    public static void main(String[] args) throws InterruptedException {

    WebDriver driver=new FirefoxDriver();
    try{
    driver.findElement(By.xpath(“//*[@id=’username’]”));
    }catch(ElementNotFoundException e)
    {
    Thread.sleep(10);
    driver.findElement(By.xpath(“//*[@id=’username’]”));
    }
    }

    }

  6. Hi,

    I am currently working on a project in which I have created scripts using Web Driver & TestNG Reporting.

    I have put the code for all the main test scripts under try…catch block to handle exceptions. After running the test suite I am able to successfully catch the exceptions in eclipse console. But the problem I am facing is “Results of running suite” (TestNG) tab in eclipse shows all the scrips as passed.

    I am looking for such a mechanism so that if any exception occurs while executing the test suite it should mark the corresponding test/method as failed.

    Please suggest.

  7. Hi,
    am using the below files

    iedriver-2.46-32bit—-browser version ie-11
    chromedriver-2.16——browser version 44.0
    standalone server-2.46.0

    i am getting the below issues

    –>just i able to login my application after then i need to click on element by using mousehover actions
    but its not executing properly.
    –>if i execute multiple times mouse hover action is not executing in chrome browser
    –>In ie browser its executing instead of one element its performing action on another element.

    how can i resolve these issues

    can anyone suggest me please…

    Thanks & Regards,
    Prasanthi

  8. Can we automate deskdop applications using selenium web driver.

  9. This is useful context, but it would be nice if you mention differences between Throws,Throw,Throwable classes

  10. Useful context. Thanks.

  11. To answer your question Vidya, no Selenium cannot be used to automate desktop applications. For that you could look at AutoHotkey which is free. There are other utilities such as AutoIt, but I don’t know if they are free or not.

  12. hi vidya,prasanthi i need to learn selnium pls help

  13. i hate selenium

  14. i want to learn pls help

  15. I want to upgrade

  16. package demo1;

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;

    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;

    public class writeexcelsheet {

    public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    FileInputStream file= new FileInputStream(“D:\\Book1.xlsx”);

    Workbook wob =new XSSFWorkbook(file);

    Sheet wos=wob.getSheet(“logindata”);

    Row rowcount;
    rowcount=wos.getRow(1);
    Cell col;
    col= rowcount.getCell(2);
    col.setCellValue(“pass”);

    Row rowcount1;
    rowcount1=wos.getRow(2);
    Cell col1;
    col1= rowcount1.getCell(2);
    col1.setCellValue(“fail”);

    FileOutputStream fileo= new FileOutputStream(“D:\\Book1.xlsx”);
    wob.write(fileo);

    wob.close();

    }

    }
    above program when execute getting error:
    exception thred “main” java.lang.nullpointerexception
    please help me.

  17. Exception is an error event that can happen during the execution of a program and disrupts its normal flow. Java provides a robust and object oriented way to handle exception scenarios, known as Java Exception Handling. Many Thanks for sharing this blog.

  18. I appreciate the fact that so many folks do write-ups on this topic, however they don’t seem to be real life examples. By that I mean the following:

    1. Scripts are run via something like jenkins, I don’t think its practical to do system.out.println(s), a logger would probably be used.
    2. We are going to use a framework like testng/junit. where you have to fail the test on an exception.
    3. test scripts typically have multiple steps, we can’t really put individual try/catch(s) around each step.
    4. generally folks are using the PageObject model, so how do exceptions get handled if they occur on a page object.
    5. What kind of information can i get from these exceptions? Like is there a way to get the locator used?

    For me I’d much rather see how Exception(s) are handled under the above circumstances.

  19. Hi All,

    I want to get mail whenever exception occurs in script or even if I get a error in between script while execution is in Progress , Please guide me how can I implement this.( in selenium testing using Java)

    Regards,
    Abhi

  20. Hello,

    Problem :In my application, there is the unexpected popup shows up on any screen that makes test case fail. I can surround findelement with try-catch for most likely places but it may happen on any screen so this is not a good idea to cover every finelement statement with try-catch.

    Approach : I would like to have mechanism if findlement is failed at any place due to unexpected pop up occurred, Framework should handle pop up and retry same find element statement one more time and return back to test execution to continue future steps.

    After doing some research on Internet, I feel it can be done using WebDriverEventListener and tried but did not work.

    Solution/Suggestion: Can someone please provide me solution or suggestion how this can be achieved.

    I am using Java Selenium TestNG in Framework

    Thank you

  21. The main difference between checked and unchecked exception is that the checked exceptions are checked at compile-time while unchecked exceptions are checked at runtime. Thanks for sharing this article.

Leave a Comment