【发布时间】:2026-02-15 00:05:01
【问题描述】:
我使用 TestNG 为我的网站创建了一个 Selenium 测试套件。
我的项目名称是测试我的网站。为了执行我的 Selenium 测试脚本并创建测试报告,我直接从命令提示符执行 TestNG.xml 文件。对于我网站的不同模块,我为不同的模块创建了不同的 Java 类,并将它们保存在一个包中。我的文件的源代码如下:
TestNG.xml
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Test My Website">
<test name="My Website Test">
<packages>
<package name="testmywebsite" />
</packages>
</test>
</suite>
TestLogin.java
public class TestLogin {
public static WebDriver driver;
@BeforeTest
public void setup() {
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@Test
void loginTest() {
//Code to perform the login test
}
@AfterClass
public void setupWorkHistory() {
TestModule1.driver = driver;
}
}
TestModule1.java
public class TestModule1 {
public static WebDriver driver;
@Test
void module1Test() {
//Code to perform the module 1 test
driver.getTitle();
}
@AfterClass
public void setupModule2() {
TestModule2.driver = driver;
}
}
TestModule2.java
public class TestModule2 {
public static WebDriver driver;
@Test
void module2Test() {
//Code to perform the module 2 test
driver.getTitle();
}
@AfterTest
public void tearDown() {
driver.close();
driver.quit();
}
}
请注意,在前两个 Java 类中,我添加了 setup<Next Class's name>() 方法来传递我的 driver 实例。
这里的问题是驱动程序实例成功地从 TestLogin.java 传递到了 TestModule1.java。然而,它在module2Test() 方法中抛出了NullPointerException,因此尽管在TestModule1.java 中创建了setupModule2() 方法并添加了@AfterClass 注释,但它显示module2Test() 的TestNG 报告失败。
谁能告诉我为什么会发生这种情况?尽早回复将不胜感激。谢谢。
【问题讨论】:
-
您是否认为
TestModule2在TestModule1之后运行? -
感谢您的回复。如果 TestModule1 可以在 TestLogin 之后运行,为什么不应该运行?
-
真的,我的意思是说
TestModule2可能在TestModule1之前运行。这将导致 NPE。因为您正在进行数据耦合,您可能希望创建一个组依赖项,以防止TestModule2在TestModule1之前运行。 -
似乎是拼写错误。你能看看你的Test Module Class 2吗?它被命名为“TestModule12”而不是“TestModule2”
-
@BobDalgleish 很明显,TestModule2 在 TestModule1 之后运行,因为 TestModule2 的测试脚本在 TestModule1 之后执行。
标签: java nullpointerexception selenium-webdriver annotations testng