简体   繁体   中英

java.lang.NullPointerException error on Page Object Model with cucumber

I am getting java.lang.NullPointerException while following Page Object Model with Cucumber. I am not sure what I am doing wrong here, please help me on this

Below is my Test Base Class:

package com.qa.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;

public class TestBase {

    public static WebDriver driver;
    public static  Properties prop;

    //public WebDriver initializeWebDriver() throws IOException
    public static void initializeWebDriver() throws IOException
    {

        prop = new Properties();
        FileInputStream fis = new FileInputStream("D:\\Automation\\WebAutomation\\src\\main\\java\\com\\qa\\config\\config.properties");

        prop.load(fis);
        String browserName = prop.getProperty("browser");

        //Execute in Chrome
        if(browserName.equals("Chrome"))
        {
            System.setProperty("webdriver.chrome.driver","D:\\Drivers\\chromedriver.exe");
            driver=new ChromeDriver();  
            //driver.manage().window().maximize();          
        }
        //Execute in FireFox
        else if(browserName.equals("Firefox"))
        {
            System.setProperty("webdriver.gecko.driver","D:\\Drivers\\geckodriver-v0.19.1-win64(1)");
            driver = new FirefoxDriver();
        }

        driver.manage().window().maximize();
        driver.get(prop.getProperty("appURL"));
        driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT,TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(TestUtil.IMPLICIT_WAIT, TimeUnit.SECONDS);
        return driver;

    }

}

Below is my login page Objects Class

package com.qa.pages;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

import com.qa.util.TestBase;

public class LoginPage extends TestBase {

    public LoginPage()  {
        /*super(driver);
        this.driver=driver;*/
        PageFactory.initElements(driver, this);
    }

    // Login Page Title
    
    public String validateLoginPageTitle() {
        return driver.getTitle();
    }
    
    // Welcome text

    @FindBy(css=".login-form > h2:nth-child(1)")
    WebElement header;

    public String loginPageHeaderText() {
        return header.getText();
    }
}

Below is my Step Def

package com.qa.stepdefinations;

import java.io.IOException;

import org.testng.Assert;

import com.qa.pages.LoginPage;
import com.qa.util.TestBase;

import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;

public class LoginStepDef extends TestBase {
    
    LoginPage LoginPage = new LoginPage();
    
     @Given("^I launch browser and access the GE URL$")
    public void i_launch_browser() throws IOException {
         
        TestBase.initializeWebDriver();
    }
    
    @Then("^I am on Login Page$")
    public void i_am_on_login_page() {
        
        String expectedLoginPageTile = prop.getProperty("LoginPage_Title");
        String actualLoginPageTitle = LoginPage.validateLoginPageTitle();
        Assert.assertEquals(actualLoginPageTitle, expectedLoginPageTile);
    }

    @Then("^I verify header text is displaying$")
    public void i_verify_header_text_is_displaying() {
         String expectedHeaderText = prop.getProperty("LoginPage_Expected_Header");
         String actualdHeaderText = LoginPage.loginPageHeaderText();
         Assert.assertEquals(actualdHeaderText, expectedHeaderText);
    }
}

The script is working fine for LoginPage.validateLoginPageTitle(); however, I am not sure why it is not working for the next step ie LoginPage.loginPageHeaderText();

It seems issue is with your locator, check if it is correct.

@FindBy(css="<b><em>.login-form > h2:nth-child(1)</em></b>")
    WebElement header;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM