title: What is this Error: at com.google.common.base.Preconditions.checkNotNull
body: <p>I am a new automation tester, Working on sample test scripts, Need some help from you guys, I have tried to use POM and basic TestNG.</p>
  
  <p>I have created 2 packages - pages and testcases.</p>
  
  <p>I am getting some error when I am trying to access the "ClickJoin, Enterusername" methods from my pages packages. I had tried figuring out the issue, but was unable to get to why this error is occurring.</p>
  
  <p>Below is the Error:
  java.lang.NullPointerException
  at com.google.common.base.Preconditions.checkNotNull</p>
  
  <p><strong>My Code from the "pages" package:</strong>
      package com.gptoday.pages;</p>
  
  <pre><code>import org.openqa.selenium.By;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.support.ui.ExpectedConditions;
  import org.openqa.selenium.support.ui.WebDriverWait;
  
  public class Login {
  
  public WebDriver driver;
  public WebDriverWait wait;
  By join = By.xpath("//*[@id='members']/a[1]");
  By username = By.id("username");
  By password = By.id("password");
  By loginButton = By.xpath("//*[@id='normallogin']/div[4]/p/input[2]");
  
  public Login (WebDriver driver){
      this.driver=driver;
  }
      public void ClickJoin(){
          wait = new WebDriverWait(driver,10);
          //driver.findElement(join).click();
  
  wait.until(ExpectedConditions.visibilityOfElementLocated(join)).click();
      }
  
      public void EnterUsername(){
          wait = new WebDriverWait(driver, 10);
  
  
  wait.until(ExpectedConditions.visibilityOfElementLocated(username)).click();
          wait.until(ExpectedConditions.visibilityOfElementLocated(username)).sendKeys("Test username");
          System.out.println("Username Entered");
      }
  
      public void EnterPassword(){
          driver.findElement(password).clear();
          driver.findElement(password).click();
          System.out.println("Password Entered");
      }
  
          public void ClickButton(){
              wait = new WebDriverWait(driver, 10);
              //driver.findElement(loginButton).click();
   wait.until(ExpectedConditions.visibilityOfElementLocated(loginButton)).click();
              System.out.println("Login Button Clicked");
          }
      }
  </code></pre>
  
  <p><strong>My Code from the "TestCases" package:
  This code is of my base class.</strong></p>
  
  <pre><code>package com.gptoday.com.gptoday.testcases;
  
  import org.testng.annotations.Test;
  import org.testng.annotations.BeforeMethod;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.firefox.FirefoxDriver;
  import org.openqa.selenium.firefox.FirefoxProfile;
  import org.openqa.selenium.firefox.internal.ProfilesIni;
  import org.testng.annotations.AfterMethod;
  import org.openqa.selenium.firefox.internal.ProfilesIni;
  
  public class Base {
      public WebDriver driver;
  
      @BeforeMethod
      public void BaseSetup(){
          ProfilesIni prof = new ProfilesIni();
          FirefoxProfile ffProfile= prof.getProfile ("vishvesh");
          ffProfile.setAcceptUntrustedCertificates(true);
          ffProfile.setAssumeUntrustedCertificateIssuer(false);
  
          String BaseUrl = "https://www.gptoday.com";
          System.setProperty("webdriver.gecko.driver", "G:/Workplace/AutomationSetupFiles/Geckdriver/geckodriver.exe"); 
          driver = new FirefoxDriver (ffProfile);
          driver.get(BaseUrl);
          driver.manage().window().maximize();
      }
  
      @AfterMethod
      public void afterTest() {
          System.out.println("Success");
        }
  }
  
  **Below the the code for the test case.**
  package com.gptoday.com.gptoday.testcases;
  
  import org.testng.annotations.Test;
  import com.gptoday.pages.Login;
  import org.openqa.selenium.WebDriver;
  
  
  public class LoginVerification extends Base {
  
      public WebDriver driver;
      public Login obj = new Login(driver);
  
      @Test
      public void Verify()
      {
          obj.ClickJoin();
          obj.EnterUsername();
      }
  }
  
  **Error:**
  Success
  FAILED: Verify
  java.lang.NullPointerException
      at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770)
      at org.openqa.selenium.support.ui.FluentWait.&lt;init&gt;(FluentWait.java:96)
      at org.openqa.selenium.support.ui.WebDriverWait.&lt;init&gt;(WebDriverWait.java:71)
      at org.openqa.selenium.support.ui.WebDriverWait.&lt;init&gt;(WebDriverWait.java:45)
      at com.gptoday.pages.Login.ClickJoin(Login.java:22)
      at com.gptoday.com.gptoday.testcases.LoginVerification.Verify(LoginVerification.java:16)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
      at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
      at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
      at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
      at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
      at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
      at org.testng.TestRunner.privateRun(TestRunner.java:744)
      at org.testng.TestRunner.run(TestRunner.java:602)
      at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
      at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
      at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
      at org.testng.SuiteRunner.run(SuiteRunner.java:289)
      at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
      at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
      at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
      at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
      at org.testng.TestNG.runSuites(TestNG.java:1144)
      at org.testng.TestNG.run(TestNG.java:1115)
      at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
      at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
      at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
  </code></pre>