0

Hello guys I am getting error while running below TestNG test.

public class BaseTest {
    WebDriver driver;

    @BeforeClass
    public void LaunchBrowser() throws InterruptedException {

        System.setProperty("webdriver.chrome.driver", "c://chromedriver.exe");

        WebDriver driver = new ChromeDriver();
        Thread.sleep(5000);
        driver.get("https://stackoverflow.com/questions/26032149/selenium-testng-java-lang-nullpointerexception");
        System.out.println("1");
        driver.manage().window().maximize();
        Thread.sleep(10000);

    }

}



public class Homepage extends BaseTest 
{
    WebDriver driver;

    @Test
    public void Discover() {

        driver.findElement(By.xpath("/html/body/header/div/ol[1]/li/a")).click();

    }
}


Error:
1
FAILED: Discover
java.lang.NullPointerException
    at pages.Homepage.Discover(Homepage.java:16)
    


===============================================
    Default test
    Tests run: 1, Failures: 1, Skips: 0
===============================================
7
  • Does this answer your question? What is a NullPointerException, and how do I fix it? Commented Sep 21, 2020 at 17:13
  • can you add more details. On where did you get Error. And what all things you have tried to solve this Commented Sep 21, 2020 at 17:15
  • I am getting error on the line "driver.findElement(By.xpath("/html/body/header/div/ol[1]/li/a")).click();" in "public class Homepage" class Commented Sep 21, 2020 at 17:16
  • 1
    I guess xpath("/html/body/header/div/ol[1]/li/a") doesn't return any WebElement. And you are calling click() method in it, so you are getting Null Pointer Exception So there must be some problem with the Element you are trying to find Commented Sep 21, 2020 at 17:22
  • 1
    @sandeepreddy: couple of mistake in code. In BaseTest class, change WebDriver driver = new ChromeDriver(); to driver = new ChromeDriver(); as you have already declared driver variable as class variable. In Homepage class comment out or remove WebDriver driver as you have inherited BaseTest which has driver and I guess you want to use it. Commented Sep 21, 2020 at 17:56

1 Answer 1

1
Null point exception occurring because of driver instance you are initiating begin differently than later.
Please create and use driver instance as a global variable 

static WebDriver driver;
-------------------------------------------------------------------------------------------
OR

Singleton is solution for null point exception in your test automation 

Create class and by using method you can use driver instance any where without any issue like null point 

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Paths;

public class TestApp {
    private WebDriver driver;
    private static TestApp myObj;
    // public static WebDriver driver;
    utils.PropertyFileReader property = new PropertyFileReader();

    public static TestApp getInstance() {
        if (myObj == null) {
            myObj = new TestApp();
            return myObj;
        } else {
            return myObj;
        }
    }

    //get the selenium driver
    public WebDriver getDriver()
    {
        return driver;
    }

    //when selenium opens the browsers it will automatically set the web driver
    private void setDriver(WebDriver driver) {
        this.driver = driver;
    }

    public static void setMyObj(TestApp myObj) {
        TestApp.myObj = myObj;
    }

    public void openBrowser() {


        //String chromeDriverPath = property.getProperty("config", "chrome.driver.path");
        //String chromeDriverPath = property.getProperty("config", getChromeDriverFilePath());
        System.setProperty("webdriver.chrome.driver", getChromeDriverFilePath());
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--disable-notifications");
        options.addArguments("disable-infobars");
        driver = new ChromeDriver(options);
        driver.manage().window().maximize();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }



    public void navigateToURL() {

        String url =property.getProperty("config","url");
     ;
        driver.get(url);
    }

    public void closeBrowser()
    {
        driver.quit();
    }

    public WebElement waitForElement(By locator, int timeout)
    {
        WebElement element = new WebDriverWait(TestApp.getInstance().getDriver(), timeout).until
                (ExpectedConditions.presenceOfElementLocated(locator));
        return element;
    }

    private String getChromeDriverFilePath()
    {
        // checking resources file for chrome driver in side main resources
        URL res = getClass().getClassLoader().getResource("chromedriver.exe");
        File file = null;
        try {
            file = Paths.get(res.toURI()).toFile();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        return file.getAbsolutePath();
    }
}


//If you want call driver instance you can use following line 

**TestApp.getInstance().getDriver();**
Sign up to request clarification or add additional context in comments.

1 Comment

You can import chromedriver inside resource directory if any doudts you have please comment

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.