Base class
package resources;
import java.io.FileInputStream;
import java.io.IOException;
import java.time.Duration;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
public class base {
public WebDriver driver;
public Properties property;
public String url= "qwerty";
public WebDriver initializeDriver() throws IOException {
property = new Properties();
FileInputStream file = new FileInputStream("D:\\qwe\\rty\\src\\main\\java\\resources\\data.properties");
property.load(file);
String BrowserName = property.getProperty("browser");
if(BrowserName.equals("chrome"))
{
System.setProperty("webdriver.chrome.driver", "D:\qwe\\rty\\chromedriver.exe");
driver = new ChromeDriver();
}
else if(BrowserName.equals("firefox"))
{
driver = new FirefoxDriver();
}
else if(BrowserName.equals("IE"))
{
//Executes IE
}
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
return driver;
}
public WebDriver verifyPage() {
driver.get(url);
String Expected = driver.findElement(By.cssSelector("p[class='login-box-msg']")).getText();
String Actual = "Sign in to start your session";
Assert.assertEquals(Actual, Expected);
System.out.println("Homepage is displayed");
return driver;
}
}
Page Object class
I am getting NPE in user() method in this line return driver.findElement(username);
package pageObjects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class LoginPage {
public WebDriver driver;
By username = By.xpath("//input[@type='text']");
By password = By.xpath("//input[@type='password']");
By login = By.xpath("//button[@type='submit']");
By profile = By.xpath("//li[contains(@class,'nav-item dropdown user-menu')]/a[1]/img");
By logout = By.xpath("//li[@class='user-footer']/a[1]");
public LoginPage(WebDriver driver) {
this.driver = driver;
}
public WebElement user() {
return driver.findElement(username);
}
public WebElement pass() {
return driver.findElement(password);
}
public WebElement signIn() {
return driver.findElement(login);
}
public WebElement pro() {
return driver.findElement(profile);
}
public WebElement signOut() {
return driver.findElement(logout);
}
}
Testcase
When I run testcase when I call lp.user() geeting NPE error in page object class
package Admission;
import java.io.IOException;
import java.time.Duration;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;
import pageObjects.LoginPage;
import resources.base;
public class homePage extends base{
public WebDriver driver;
LoginPage lp = new LoginPage(driver);
@Test
public void loginDetails() throws IOException, InterruptedException
{
driver=initializeDriver();
verifyPage();
WebElement aadharNo = lp.user();
aadharNo.sendKeys("111111111111");
WebElement password = lp.pass();
password.sendKeys("21102021");
WebElement submit = lp.signIn();
submit.click();
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOf(lp.pro())).click();
WebDriverWait wait1 = new WebDriverWait(driver, Duration.ofSeconds(10));
wait1.until(ExpectedConditions.visibilityOf(lp.signOut())).click();
}
@Test
public void testCase() {
WebElement aadharNo = lp.user();
WebDriverWait wait2 = new WebDriverWait(driver, Duration.ofSeconds(30));
wait2.until(ExpectedConditions.visibilityOf(aadharNo));
aadharNo.sendKeys("111111111111");
WebElement password = lp.pass();
WebDriverWait wait3 = new WebDriverWait(driver, Duration.ofSeconds(20));
wait3.until(ExpectedConditions.elementToBeSelected(password));
password.sendKeys("hgfhg");
lp.signIn();
}
}
java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.findElement(org.openqa.selenium.By)" because "this.driver" is null at pageObjects.LoginPage.user(LoginPage.java:31) at Admission.homePage.testCase(homePage.java:52)
CodePudding user response:
You need to initializeDriver()
before creating LoginPage
object:
public class homePage extends base{
public WebDriver driver = initializeDriver();
LoginPage lp = new LoginPage(driver);
@Test
public void loginDetails() throws IOException, InterruptedException {
verifyPage();
WebElement aadharNo = lp.user();
aadharNo.sendKeys("111111111111");
WebElement password = lp.pass();
password.sendKeys("21102021");
WebElement submit = lp.signIn();
submit.click();
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOf(lp.pro())).click();
WebDriverWait wait1 = new WebDriverWait(driver, Duration.ofSeconds(10));
wait1.until(ExpectedConditions.visibilityOf(lp.signOut())).click();
}
(...)
}