带有cucumber的页面对象模型上的java.lang.NullPointerException错误

带有cucumber的页面对象模型上的java.lang.NullPointerException错误,java,selenium,selenium-webdriver,cucumber,pageobjects,Java,Selenium,Selenium Webdriver,Cucumber,Pageobjects,在使用Cucumber跟踪页面对象模型时,我得到了java.lang.NullPointerException。我不确定我做错了什么,请帮助我 下面是我的测试基类: package com.qa.util; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; import java.util.concurrent.TimeUnit; import org.openqa

在使用Cucumber跟踪页面对象模型时,我得到了java.lang.NullPointerException。我不确定我做错了什么,请帮助我

下面是我的测试基类:

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;

    }

}
下面是我的登录页面对象类

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();
    }
}
下面是我的步骤

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);
    }
}


对于
LoginPage.validateLogingPageTitle(),脚本工作正常但是,我不确定它为什么不能用于下一步,即
LoginPage.loginPageHeaderText()

问题似乎出在您的定位器上,请检查它是否正确

@FindBy(css="<b><em>.login-form > h2:nth-child(1)</em></b>")
    WebElement header;
@FindBy(css=“.login form>h2:nth child(1)”)
网页元素标题;

我检查了定位器,它是正确的,如果尝试访问其他元素-1,我会收到相同的错误,因为Selenium从不为不正确的定位器返回null。它可能是
InvalidSelectorException
NoSuchElementException
问题是,首先通过将其作为实例变量添加到
LoginStepDef
来初始化
LoginPage
,然后使用
initializeWebDriver()
方法初始化值<代码>登录页面
获取
null
WebDriver