提问人:Kaiser 提问时间:10/15/2023 最后编辑:Kaiser 更新时间:10/16/2023 访问量:40
从 xml 文件将测试用例作为组运行时出现 NullPointer 异常
NullPointer Exception when running testcases as groups from xml file
问:
我是硒的新手。我尝试从XML文件运行两个类。我把测试分组在这两类中。但是当我在XML文件中添加标签时,它给出了一个nullpointer异常。但是当我运行它时,它工作正常。
XML 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Annotation running">
<test name="Annotation Test Runner With Group!" >
<groups>
<run>
<include name="smoke"/>
</run>
</groups>
<classes>
<class name="DemoPractise.Annotation"/>
<class name="DemoPractise.annotation2"/>
</classes>
</test>
</suite>
Erro 日志
java.lang.NullPointerException
at DemoPractise.Annotation.test2_BtsListBox(Annotation.java:31)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139)
at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:664)
at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:227)
at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50)
at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:957)
at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:200)
at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148)
at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at org.testng.TestRunner.privateRun(TestRunner.java:848)
at org.testng.TestRunner.run(TestRunner.java:621)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:443)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:437)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:397)
at org.testng.SuiteRunner.run(SuiteRunner.java:336)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1280)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1200)
at org.testng.TestNG.runSuites(TestNG.java:1114)
at org.testng.TestNG.run(TestNG.java:1082)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:105)
java.lang.NullPointerException
at DemoPractise.annotation2.test4_JQueryListBox(annotation2.java:32)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139)
at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:664)
at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:227)
at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50)
at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:957)
at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:200)
at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148)
at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at org.testng.TestRunner.privateRun(TestRunner.java:848)
at org.testng.TestRunner.run(TestRunner.java:621)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:443)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:437)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:397)
at org.testng.SuiteRunner.run(SuiteRunner.java:336)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1280)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1200)
at org.testng.TestNG.runSuites(TestNG.java:1114)
at org.testng.TestNG.run(TestNG.java:1082)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:105)
===============================================
Annotation running
Total tests run: 2, Passes: 0, Failures: 2, Skips: 0
===============================================
Process finished with exit code 0
我尝试在 @BeforeMethod 中设置驱动程序。但是,当使用标记来命名 xml 文件中的组时,它不会初始化。
答:
0赞
Nael Marwan
10/15/2023
#1
在测试类中遇到的 NullPointerException 可能是由于初始化 WebDriver 实例的方式和类中的测试方法所致。问题是 WebDriver 实例在任何测试方法之外进行初始化,导致它在执行测试方法时为 null。 若要解决此问题,应在每个测试方法中或使用 TestNG 的@BeforeMethod注释初始化 WebDriver 实例。
WebDriver driver;
@BeforeSuite
public void browserSetup() {
WebDriverManager.chromedriver().setup(); // You should setup WebDriverManager for Chrome
driver = new ChromeDriver();
driver.manage().window().maximize();
}
@Test(groups = "original")
public void test1_BtsDatePicker() {
driver.get("https://www.lambdatest.com/selenium-playground/");
driver.findElement(By.linkText("Bootstrap Date Picker")).click();
}
@Test(groups = {"regression", "smoke"})
public void test2_BtsListBox() {
driver.get("https://www.lambdatest.com/selenium-playground/");
driver.findElement(By.linkText("Bootstrap List Box")).click();
}
@AfterSuite
public void tearDown() {
if (driver != null) {
driver.quit(); // Use quit to close the browser and release resources
}
}
评论
0赞
Kaiser
10/15/2023
我也尝试过@BeforeMethod注释,但结果是一样的!虽然,如果我在每个测试方法中初始化一个 webdriver 实例,它就会起作用。但我想创建一个 Web 驱动程序实例一次,并将其用于所有其他测试方法。当我在 XML 文件中运行带有“<exclude>标签的测试方法时,上面的代码有效。只有当我使用“<include>”标签时才会发生问题。
0赞
Nael Marwan
10/15/2023
因此,将 webDriver 声明为静态。
0赞
Kaiser
10/16/2023
我的问题是代码工作正常,但是当它使用“exclude”标签从XML运行时!为什么它不使用“include”标签运行?为什么 include 标签的 nullpointer 异常?
0赞
Kaiser
10/16/2023
#2
发生此问题的原因是我没有将 @BeforeSuite 和 @AfterSuite 方法添加到组并将它们添加到 XML 文件中。我以为无论我是否将它们包含在 XML 文件中,这两个方法都会运行!仅使用“exclude”,它就会运行,因为它运行除所提供组中的方法之外的所有技术。
评论