0
votes

I am quite new to Selenium WebDriver. A java.lang.NullPointerException has been troubling me for sometime now, and I cannot understand why. Following are my classes which are quite simple actually:

suiteBase.java

package utilities.suiteBase;

import org.openqa.selenium.WebDriver;

import actions.testPage1.testPage1Actions;
import ui_map.testPage1.TestPage1UI;

public class suiteBase {
    public WebDriver driver;

    protected static TestPage1UI tpui = new TestPage1UI();
    protected static testPage1Actions tpa = new testPage1Actions();
}

testPage1Actions.java

package actions.testPage1;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriver.Timeouts;
import org.openqa.selenium.WebElement;

import utilities.suiteBase.suiteBase;

public class testPage1Actions extends suiteBase {

    public WebDriver driver;
    public void test(WebDriver driver){
        WebElement loc1 = driver.findElement(By.xpath("id('email')"));
        loc1.sendKeys("testing");
        System.out.println("done...");  
    }    
}

TestPage1.java

package testPage1;

import org.openqa.selenium.WebDriver;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import utilities.suiteBase.BrowserOpen;

import utilities.suiteBase.suiteBase;

public class TestPage1 extends suiteBase{
    public WebDriver driver;
    BrowserOpen browse = new BrowserOpen();

    @Parameters({ "browserType", "appURL" })
    @Test(priority = 1)
    public void openBrowser(String browserType,  String appURL){
        browse.setUp(browserType, appURL);  
        System.out.println("Done....");
    }

    @Test(priority = 2)
    public void testCase1() throws InterruptedException{
        driver.wait(1000);
        tpa.test(driver);           
    }
}

I run the TestPage1.java file using XML, where I encounter following error:

java.lang.NullPointerException at testPage1.TestPage1.testCase1(TestPage1.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) at org.testng.TestRunner.privateRun(TestRunner.java:767) at org.testng.TestRunner.run(TestRunner.java:617) at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) at org.testng.SuiteRunner.run(SuiteRunner.java:240) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198) at org.testng.TestNG.runSuitesLocally(TestNG.java:1123) at org.testng.TestNG.run(TestNG.java:1031) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)

Also I have browserOpen class which I run before TestPage1, in which I declare the WebDriver

package utilities.suiteBase;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import utilities.suiteBase.BrowserOpen;

public class BrowserOpen {

    public WebDriver driver;
    static String driverPath = "E:\\Selenium\\";

    public void setUp(String browserType, String appURL) {
        try {
            setDriver(browserType, appURL);

        } catch (Exception e) {
            System.out.println("Error....." + e.getStackTrace());
        }
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }

private void setDriver(String browserType, String appURL) {
    switch (browserType) {
    case "chrome":
        driver = initChromeDriver(appURL);
        break;
    case "firefox":
        driver = initFirefoxDriver(appURL);
        break;
    default:
        System.out.println("browser : " + browserType
                + " is invalid, Launching Firefox as browser of choice..");
        driver = initFirefoxDriver(appURL);
    }
}

private static WebDriver initChromeDriver(String appURL) {
    System.out.println("Launching google chrome with new profile..");
    System.setProperty("webdriver.chrome.driver", driverPath + "chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.navigate().to(appURL);
    System.out.println("URL inserted");
//  driver.get(appURL);
    return driver;
}

private static WebDriver initFirefoxDriver(String appURL) {
    System.out.println("Launching Firefox browser..");
    WebDriver driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.navigate().to(appURL);
    return driver;
}
}
3
Did you look at what line the error is on? What line is it? Did you google NullPointerExceptions? What did you find? What have you done to try to solve the problem yourself?JeffC

3 Answers

2
votes

I never used this technology before, but I see not inited elements.

public WebDriver driver;

WebDriver was not initialized.
You need to initialize them before using. Like:

WebDriver driver = new FirefoxDriver();

Or something else. Check this out: http://www.seleniumhq.org/docs/03_webdriver.jsp

-- UPD: Exception is probably throwing at testCase1() tpa.test(WebDriver). tpa is probably null.

0
votes

you are using @Parameters({ "browserType", "appURL" }) in your TestPage1 class that will come from testng.xml file . Hope your using this xml file to run your test.

0
votes

When I declared - public static WebDriver driver; before @BeforeSuite

and then inside the method if we again declared as

WebDriver driver = new FirefoxDriver();

and run the script then it shows me java.lang.NullPointerException error.

Please try below code to resolve :-

driver = new Firefoxdriver();

Example -

public class LearnCheckBox {
    
    public static WebDriver driver;
    
    @BeforeSuite
    
    public static void verify_SetupBrowser() throws InterruptedException
    {
        driver = new FirefoxDriver(); // 
        driver.get("https://learn.letskodeit.com/p/practice");
        driver.manage().window().maximize();
        Thread.sleep(2000);
    }

Ashish Bind