首页 > 解决方案 > 在使用 PageObjectModel 和 TestNG 的程序中,我得到 NullPointerException

问题描述

在项目中,我创建了 3 个类。第一类是 src/main/java 中的 Browser_Initialize,第二类是 src/main/java 中的 PhoneWall_Page,第三类是 src/main/java 中的 PhoneWall_TestClass。在 Browser_Initialize 我定义了浏览器初始化。在 PhoneWall_Page 中,使用 Page Factory 初始化了所有 webelemnts 并且还创建了一些方法。在 PhoneWall_TestClass 中调用 Phonewall_Page 类中的方法。一旦代码到达@Test 注释,我就会得到空指针异常。

package com.base;

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

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class BaseClass {
    public static Properties prop;
    public static WebDriver driver;
    
    public BaseClass()  {
        
    try {
    prop=new Properties();
    FileInputStream fip=new FileInputStream(System.getProperty("user.dir")+"//src/main//resources//PropertyFile//PropertyData.properties");
    prop.load(fip);
    }
    catch(FileNotFoundException e){
        e.printStackTrace();
    }
    catch(IOException e) {
        e.printStackTrace();
    }   
}
        
    public void initialize() {
        System.setProperty("webdriver.chrome.driver", "C:\\chromeDriver\\chromedriver_win32 (2)\\chromedriver.exe");
        driver=new ChromeDriver();
        driver.get(prop.getProperty("url"));
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        System.out.println(driver);

    }
}

package com.pages;

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

import com.base.BaseClass;

public class PhonePage extends BaseClass{
    WebDriver driver;
    
    public PhonePage(WebDriver driver) {
        //super(driver);
        this.driver=driver;
        PageFactory.initElements(driver, this);
    }

    @FindBy(xpath="//div[@aria-label='View device Apple iPhone 12 Pro Max ']") 
    WebElement Device;
    
    
    public void ScrollMethod() {
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("window.scrollBy(0,1000)");
    }
    
    public void DeviceSelection() {
        System.out.println("Device selection");
        System.out.println(driver);
        Device.click();
        
        
    }
}

package com.test;

import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.base.BaseClass;
import com.pages.PhonePage;

public class PhoneTest extends BaseClass {
    
    WebDriver driver;
    PhonePage phonepage=new PhonePage(driver);;
    
//
//  public PhoneTest(WebDriver driver) {
//////      super(driver);
//      this.driver=driver;     
//  }

    @BeforeMethod
    public void browser() {
        System.out.println("Before method driver obj is:"+  driver);
        initialize();
        System.out.println("Before method driver obj is:"+  driver);
    }
        
    @Test
    public void SelectDevice() {
        
        System.out.println("Test mthod driveris:"+driver);
        phonepage.DeviceSelection();        
    }
    
    @AfterTest
    public void closeBrowser() {
        driver.close();
    }

}

控制台中显示的错误:

java.lang.NullPointerException
    at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
    at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
    at com.sun.proxy.$Proxy11.click(Unknown Source)
    at com.sprint.qa.pages.PhoneWall_Page.DeviceSelection(PhoneWall_Page.java:31)
    at com.sprint.qa.testcases.PhoneWall_TestClass.SelectDevice(PhoneWall_TestClass.java:31)

标签: javanullpointerexceptiontestng

解决方案


推荐阅读