Java org.testng.TestNGException:无法实例化类
在使用java(使用Maven项目)运行selenium webdriver中的一个测试用例时,我遇到了这个“Cannot insantiate class”错误 下面是我定义驱动程序和属性的父类Java org.testng.TestNGException:无法实例化类,java,eclipse,selenium,testng,Java,Eclipse,Selenium,Testng,在使用java(使用Maven项目)运行selenium webdriver中的一个测试用例时,我遇到了这个“Cannot insantiate class”错误 下面是我定义驱动程序和属性的父类 package com.pvi.qa.base; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties
package com.pvi.qa.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 TestBase {
public static WebDriver driver;
public static Properties prop ;
public TestBase() {
try {
prop = new Properties();
FileInputStream ip = new FileInputStream(System.getProperty("C:\\Users\\RxLogix\\eclipse-workspace\\PviIntake\\src\\main\\java\\com\\pvi\\qa\\config\\config.properties"));
prop.load(ip);
}
catch(FileNotFoundException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
public static void initialization () {
String BrowserName = prop.getProperty("browser");
if(BrowserName.equals("chrome")) {
System.setProperty("webdriver.chrome.driver", "D:\\Softwares\\chromedriver_win32 (1)\\chromedriver.exe");
driver = new ChromeDriver();}
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get(prop.getProperty("url"));
}
}
下面是我正在运行的TestNG测试用例类
package com.pvi.qa.testcases;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.pvi.qa.base.TestBase;
import com.pvi.qa.pages.HomePage;
import com.pvi.qa.pages.LoginPage;
public class LoginPageTest extends TestBase{
LoginPage loginPage;
HomePage homePage;
public LoginPageTest() {
super();
}
@BeforeMethod
public void setUp() {
initialization();
loginPage = new LoginPage();
}
@Test
public void logintest() {
homePage = loginPage.login(prop.getProperty("username"), prop.getProperty("password"));
}
@AfterMethod
public void tearDown() {
driver.quit();
}
}
下面是我得到的错误-
[RemoteTestNG] detected TestNG version 6.14.3
org.testng.TestNGException:
Cannot instantiate class com.pvi.qa.testcases.LoginPageTest
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:30)
at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:423)
at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:336)
at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:125)
at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:190)
at org.testng.TestClass.getInstances(TestClass.java:95)
at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:81)
at org.testng.TestClass.init(TestClass.java:73)
at org.testng.TestClass.<init>(TestClass.java:38)
at org.testng.TestRunner.initMethods(TestRunner.java:389)
at org.testng.TestRunner.init(TestRunner.java:271)
at org.testng.TestRunner.init(TestRunner.java:241)
at org.testng.TestRunner.<init>(TestRunner.java:192)
at org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33)
at org.testng.remote.support.RemoteTestNG6_12$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_12.java:66)
at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:713)
at org.testng.SuiteRunner.init(SuiteRunner.java:260)
at org.testng.SuiteRunner.<init>(SuiteRunner.java:198)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1295)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1273)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1128)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:24)
... 25 more
Caused by: java.lang.NullPointerException
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at com.pvi.qa.base.TestBase.<init>(TestBase.java:20)
at com.pvi.qa.testcases.LoginPageTest.<init>(LoginPageTest.java:17)
... 30 more
[RemoteTestNG]检测到TestNG版本6.14.3
org.testng.TestNGException:
无法实例化类com.pvi.qa.testcases.LoginPageTest
位于org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:30)
位于org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:423)
位于org.testng.internal.ClassHelper.createInstance(ClassHelper.java:336)
位于org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:125)
位于org.testng.internal.ClassImpl.getInstances(ClassImpl.java:190)
位于org.testng.TestClass.getInstances(TestClass.java:95)
位于org.testng.TestClass.initTestClassesAndInstances(TestClass.java:81)
位于org.testng.TestClass.init(TestClass.java:73)
位于org.testng.TestClass.(TestClass.java:38)
位于org.testng.TestRunner.initMethods(TestRunner.java:389)
位于org.testng.TestRunner.init(TestRunner.java:271)
位于org.testng.TestRunner.init(TestRunner.java:241)
位于org.testng.TestRunner.(TestRunner.java:192)
位于org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33)
位于org.testng.remote.support.RemoteTestNG6_12$delegatingestrunnerfactory.newestrunner(RemoteTestNG6_12.java:66)
位于org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:713)
位于org.testng.SuiteRunner.init(SuiteRunner.java:260)
位于org.testng.SuiteRunner(SuiteRunner.java:198)
位于org.testng.testng.createSuiteRunner(testng.java:1295)
位于org.testng.testng.createSuiteRunners(testng.java:1273)
位于org.testng.testng.runSuitesLocally(testng.java:1128)
位于org.testng.testng.runSuites(testng.java:1049)
位于org.testng.testng.run(testng.java:1017)
位于org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
原因:java.lang.reflect.InvocationTargetException
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(未知源)
位于java.base/java.lang.reflect.Constructor.newInstance(未知源)
位于org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:24)
... 25多
原因:java.lang.NullPointerException
位于java.base/java.io.FileInputStream。(未知源)
位于java.base/java.io.FileInputStream。(未知源)
位于com.pvi.qa.base.TestBase(TestBase.java:20)
登录com.pvi.qa.testcases.LoginPageTest.(LoginPageTest.java:17)
... 30多
我已经尝试了所有的方法,但是没有成功,请让我知道为什么我会犯这个错误。感谢最低的'caused by'部分指向基类构造函数中的底层异常:您正在使用文件路径调用
System.getProperty
;这可能会返回null。在我看来,整个调用不应该在那里,您只需要将文件路径传递给FileInputStream
构造函数(或者使用某个键从系统属性读取)最低的'caused by'部分指向基类构造函数中的底层异常:您正在使用文件路径调用System.getProperty
;这可能会返回null。在我看来,整个调用不应该在那里,您只想将文件路径传递给FileInputStream
构造函数(或者用某个键从系统属性读取)查看代码,我知道问题出在基类的构造函数中。
LoginPageTest调用super(),super()调用TestBase
FileInputStream需要一个文件路径。我怀疑创建的FileInputSteam对象是空的
为什么要调用System.getProperty?config.properties文件可用吗?查看代码,我知道问题出在基类的构造函数中。 LoginPageTest调用super(),super()调用TestBase FileInputStream需要一个文件路径。我怀疑创建的FileInputSteam对象是空的
为什么要调用System.getProperty?config.properties文件可用吗?只需从基类中删除
System.getproperty
。使用以下代码行
prop = new Properties();
FileInputStream ip = new FileInputStream(("C:\\Users\\RxLogix\\eclipse-workspace\\PviIntake\\src\\main\\java\\com\\pvi\\qa\\config\\config.properties"));
prop.load(ip);
只需从基类中删除
System.getproperty
。使用以下代码行
prop = new Properties();
FileInputStream ip = new FileInputStream(("C:\\Users\\RxLogix\\eclipse-workspace\\PviIntake\\src\\main\\java\\com\\pvi\\qa\\config\\config.properties"));
prop.load(ip);
谢谢!!我删除了sytem.getproperty,它工作正常。非常感谢!!我删除了sytem.getproperty,它工作正常。谢谢!!是的,我使用的是config.property文件,问题是我使用的是sytem.getproperty。我把它拆了,现在工作很好。很高兴它有帮助。如果我的回答有用,请投赞成票。谢谢!!是的,我使用的是config.property文件,问题是我使用的是sytem.getproperty。我把它拆了,现在工作很好。很高兴它有帮助。如果我的回答有用,请投赞成票。