【问题标题】:java.lang.NullPointerException error on Page Object Model with cucumber带有黄瓜的页面对象模型上的 java.lang.NullPointerException 错误
【发布时间】:2020-08-04 17:58:27
【问题描述】:

我在使用 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.validateLoginPageTitle(); 运行良好,但是我不确定为什么它不适用于下一步,即 LoginPage.loginPageHeaderText();

【问题讨论】:

  • 问题是您首先通过将LoginPage 作为实例变量添加到LoginStepDef 来初始化LoginStepDef,然后使用initializeWebDriver() 方法初始化该值。 LoginPage 获取 null WebDriver

标签: java selenium selenium-webdriver cucumber pageobjects


【解决方案1】:

您的定位器似乎有问题,请检查它是否正确。

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

【讨论】:

  • 我检查了定位器,它是正确的,如果尝试访问其他元素,我会得到同样的错误
  • -1 因为 Selenium 永远不会为不正确的定位器返回 null。可以是InvalidSelectorExceptionNoSuchElementException
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多