title: Getting java.lang.NullPointerException for selenium webdriver class
body: <p>I am quite new to Selenium WebDriver. A <code>java.lang.NullPointerException</code> has been troubling me for sometime now, and I cannot understand why. Following are my classes which are quite simple actually:</p>
  
  <h3>suiteBase.java</h3>
  
  <pre><code>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();
  }
  </code></pre>
  
  <h3>testPage1Actions.java</h3>
  
  <pre><code>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...");  
      }    
  }
  </code></pre>
  
  <h3>TestPage1.java</h3>
  
  <pre><code>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);           
      }
  }
  </code></pre>
  
  <p>I run the TestPage1.java file using XML, where I encounter following error:</p>
  
  <blockquote>
    <p>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)</p>
  </blockquote>
  
  <p>Also I have browserOpen class which I run before TestPage1, in which I declare the WebDriver</p>
  
  <pre><code>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;
  }
  }
  </code></pre>