我在执行 testng 脚本时收到 java.lang.NullPointerException
i am getting a java.lang.NullPointerException while executing the testng script
虽然 运行 我在 chrome 中得到这个 java.lang.NullPointerException 的代码,但我已经将主登录 class 扩展到另一个并且它显示了这个异常。我已经将相同的主要 class 扩展到另一个差异 class 并且它成功 运行 但只有这个 class 显示错误。
这是代码
//登录页面
public class admin_login {
//public static void main(String args[]) throws InterruptedException{
WebDriver driver;
@Test
public void login() throws InterruptedException{
System.setProperty("webdriver.chrome.driver","E:\Automation\jarfiles2\chromedriver_win32_new\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://localhost/Login");
driver.manage().window().maximize();
Thread.sleep(2000);
//driver.close();
driver.findElement(By.id("UserName")).sendKeys("admin");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.id("Password")).sendKeys("adminadmin");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.cssSelector("input.btn")).click();
}
}
//用户class
public class 用户扩展 admin_login{
@Test
public void user() throws InterruptedException{
//master dropdown
//driver.findElement(By.xpath("//*[@id='topNavbarCollapse']/ul[1]/li[1]/a")).click();
try{
driver.findElement(By.xpath("//*[@id='topNavbarCollapse']/ul[1]/li[1]/a")).click();
}
catch(java.lang.NullPointerException n){
//System.out.println("exception handaled");
System.out.println(n.getMessage());
}
finally{
driver.findElement(By.xpath("//*[@id='topNavbarCollapse']/ul[1]/li[1]/a")).click();
}
我试过正常,然后也通过 try catch,但它仍然显示相同的异常并且测试失败
堆栈跟踪
java.lang.NullPointerException
at Finlogin.User.user(User.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
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)
1 java.lang.NullPointerException
出现是因为驱动程序为空。
您已决定在 login()
test-method 中初始化驱动程序。所以 user()
只有在 login()
方法之前执行过(并且驱动程序已初始化)时才会起作用。
2 当您 运行 从另一个测试 class 扩展的某些测试 class 时,将为两个 class 调用测试。但顺序可能不同。
至少当 class 名称从 A
开始并且
class 名称从 Z
开始。所以这可能就是它适用于的原因
一些其他 class(有另一个名字)。
解决方案
我建议:
在@Before
配置方法中初始化常用测试资源。
例如
@BeforeClass
public void initDriver() {
System.setProperty("webdriver.chrome.driver", "E:\Automation\jarfiles2\chromedriver_win32_new\chromedriver.exe");
driver = new ChromeDriver();
}
@Test
public void login() throws InterruptedException{
driver.get("http://localhost/Login");
...
@AfterClass
public void closeDriver() {
driver.quit();
}
因此您将避免 test-methods 执行顺序依赖性。
虽然 运行 我在 chrome 中得到这个 java.lang.NullPointerException 的代码,但我已经将主登录 class 扩展到另一个并且它显示了这个异常。我已经将相同的主要 class 扩展到另一个差异 class 并且它成功 运行 但只有这个 class 显示错误。
这是代码
//登录页面 public class admin_login {
//public static void main(String args[]) throws InterruptedException{
WebDriver driver;
@Test
public void login() throws InterruptedException{
System.setProperty("webdriver.chrome.driver","E:\Automation\jarfiles2\chromedriver_win32_new\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://localhost/Login");
driver.manage().window().maximize();
Thread.sleep(2000);
//driver.close();
driver.findElement(By.id("UserName")).sendKeys("admin");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.id("Password")).sendKeys("adminadmin");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.cssSelector("input.btn")).click();
}
}
//用户class
public class 用户扩展 admin_login{
@Test
public void user() throws InterruptedException{
//master dropdown
//driver.findElement(By.xpath("//*[@id='topNavbarCollapse']/ul[1]/li[1]/a")).click();
try{
driver.findElement(By.xpath("//*[@id='topNavbarCollapse']/ul[1]/li[1]/a")).click();
}
catch(java.lang.NullPointerException n){
//System.out.println("exception handaled");
System.out.println(n.getMessage());
}
finally{
driver.findElement(By.xpath("//*[@id='topNavbarCollapse']/ul[1]/li[1]/a")).click();
}
我试过正常,然后也通过 try catch,但它仍然显示相同的异常并且测试失败
堆栈跟踪
java.lang.NullPointerException
at Finlogin.User.user(User.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
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)
1
java.lang.NullPointerException
出现是因为驱动程序为空。您已决定在
login()
test-method 中初始化驱动程序。所以user()
只有在login()
方法之前执行过(并且驱动程序已初始化)时才会起作用。2 当您 运行 从另一个测试 class 扩展的某些测试 class 时,将为两个 class 调用测试。但顺序可能不同。 至少当 class 名称从
A
开始并且 class 名称从Z
开始。所以这可能就是它适用于的原因 一些其他 class(有另一个名字)。
解决方案
我建议:
在@Before
配置方法中初始化常用测试资源。
例如
@BeforeClass
public void initDriver() {
System.setProperty("webdriver.chrome.driver", "E:\Automation\jarfiles2\chromedriver_win32_new\chromedriver.exe");
driver = new ChromeDriver();
}
@Test
public void login() throws InterruptedException{
driver.get("http://localhost/Login");
...
@AfterClass
public void closeDriver() {
driver.quit();
}
因此您将避免 test-methods 执行顺序依赖性。