读取属性文件时出现Java Nullpointer异常

时间:2019-06-14 20:14:36

标签: java nullpointerexception

读取Config.properties文件时,获取下面的Java空指针异常。 LoginTest.java扩展了TestBase.java,并调用TestBase构造函数以加载配置属性,并调用initializeTestBase方法以从配置文件获取属性。     java.lang.NullPointerException         在com.crm.testbase.TestBase.initializeTestBase(TestBase.java:35)上

TestBase.java

public class TestBase {
  public static WebDriver driver;
  public static Properties prop;
  public TestBase() 
  {
    try
    {
      Properties prop = new Properties();
      FileInputStream fp = new FileInputStream("E:\\Photon WorkSpace\\My_DD_FRAMEWORK"
        + "\\src\\main\\java\\com\\crm\\config\\Config.properties");
      prop.load(fp);
      System.out.println("printing config="+prop.getProperty("browser"));
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public static void initializeTestBase()
  {
    String browser=prop.getProperty("browser");
    System.out.println("printg initilaz test base browser"+ prop.getProperty("browser"));
    if(browser.equals("chrome"))
    {
      System.setProperty("webdriver.chrome.driver", "E:\\Selenium Jar\\chromedriver.exe");
      driver = new ChromeDriver();
    }
    driver.manage().window().maximize();
    driver.manage().deleteAllCookies();
    driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);
    driver.manage().timeouts().implicitlyWait(TestUtil.IMPLICIT_WAIT, TimeUnit.SECONDS);
    driver.get(prop.getProperty("url"));
  }
}

LoginTest.java

public class LoginTest extends TestBase{
  LoginPage loginPage;
  HomePage hp;
  public  LoginTest()
  {
    super();
  }

  @BeforeMethod
  public void setup()
  {
    System.out.println("calling initalize base");
    initializeTestBase();
    loginPage = new LoginPage();
  }
}

Config.properties

browser=chrome
user=mytest
password=test
url=https://classic.mycrm.com/index.html

Nullpointer exception

RemoteTestNG] detected TestNG version 6.11.0
printing config=chrome
calling initalize base
FAILED CONFIGURATION: @BeforeMethod setup
java.lang.NullPointerException
at com.crm.testbase.TestBase.initializeTestBase(TestBase.java:30)
at com.crm.testcases.LoginTest.setup(LoginTest.java:24)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

1 个答案:

答案 0 :(得分:2)

在TestBase.java中,您有一个名为prop的静态变量,尚未初始化。

然后,在构造函数的try块中,执行以下操作:

Properties prop = new Properties();

这将创建一个名为prop new 局部变量,该局部变量将静态变量隐藏起来,并且完全不修改静态prop变量,因此它保持为空。该try块中所有引用prop的操作都在使用该局部变量,而不是静态变量。

然后,当您进入

String browser=prop.getProperty("browser");

您尝试从该null变量中调用方法,这会导致您看到异常。

解决方案是将构造函数更改为:

prop = new Properties()