读取Config.properties文件时,获取下面的Java空指针异常。 LoginTest.java扩展了TestBase.java,并调用TestBase构造函数以加载配置属性,并调用initializeTestBase方法以从配置文件获取属性。 java.lang.NullPointerException 在com.crm.testbase.TestBase.initializeTestBase(TestBase.java:35)上
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"));
}
}
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();
}
}
browser=chrome
user=mytest
password=test
url=https://classic.mycrm.com/index.html
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)
答案 0 :(得分:2)
在TestBase.java中,您有一个名为prop
的静态变量,尚未初始化。
然后,在构造函数的try块中,执行以下操作:
Properties prop = new Properties();
这将创建一个名为prop
的 new 局部变量,该局部变量将静态变量隐藏起来,并且完全不修改静态prop
变量,因此它保持为空。该try块中所有引用prop
的操作都在使用该局部变量,而不是静态变量。
然后,当您进入
String browser=prop.getProperty("browser");
您尝试从该null变量中调用方法,这会导致您看到异常。
解决方案是将构造函数更改为:
prop = new Properties()