在初始化驱动程序的地方扩展 BaseClass 时出现 NullPointerException
NullPointerException when extending BaseClass where driver is initialised
我在尝试将驱动程序初始化分离到一个单独的 class 时遇到 NullPointerException。
我是 Java 的初学者,我做错了什么?
BaseTest.java
package common;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import io.github.bonigarcia.wdm.WebDriverManager;
public class BaseTest {
public static WebDriver driver = null;
@BeforeSuite
public void launchBrowser() {
WebDriverManager.chromedriver().setup();
ChromeDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@AfterSuite
public void closeBrowser() {
driver.close();
}
}
Test.java
package ui;
import org.testng.annotations.Test;
import common.BaseTest;
public class ListenerDemoTest extends BaseTest{
@Test
public void something() {
driver.get("https.//google.com");
}
}
错误信息:
java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.get(String)" because "ui.ListenerDemoTest.driver" is null
at ui.ListenerDemoTest.something(ListenerDemoTest.java:10)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
所以问题是你用 null 值初始化驱动程序并且没有在方法内部更新它
更新 BaseTest
public class BaseTest {
ChromeDriver driver;
@BeforeSuite
public void launchBrowser() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@AfterSuite
public void closeBrowser() {
driver.close();
}
}
此外,您的 URL 中有错别字
driver.get("https://google.com");
在 BaseTest
中,您已将 WebDriver driver
实例初始化为 null,但您从未在 @BeforeSuite
设置中使用实际值更新引用。因此引用将始终为空,从而导致 NullPointerException 异常。在 @BeforeSuite
方法中,您完成了变量隐藏,而不是更新 driver
实例,您创建了名为 driver
的本地实例,但未能更新静态实例引用。
所需的更改是
@BeforeSuite
public void launchBrowser() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
我在尝试将驱动程序初始化分离到一个单独的 class 时遇到 NullPointerException。 我是 Java 的初学者,我做错了什么?
BaseTest.java
package common;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import io.github.bonigarcia.wdm.WebDriverManager;
public class BaseTest {
public static WebDriver driver = null;
@BeforeSuite
public void launchBrowser() {
WebDriverManager.chromedriver().setup();
ChromeDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@AfterSuite
public void closeBrowser() {
driver.close();
}
}
Test.java
package ui;
import org.testng.annotations.Test;
import common.BaseTest;
public class ListenerDemoTest extends BaseTest{
@Test
public void something() {
driver.get("https.//google.com");
}
}
错误信息:
java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.get(String)" because "ui.ListenerDemoTest.driver" is null
at ui.ListenerDemoTest.something(ListenerDemoTest.java:10)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
所以问题是你用 null 值初始化驱动程序并且没有在方法内部更新它
更新 BaseTest
public class BaseTest {
ChromeDriver driver;
@BeforeSuite
public void launchBrowser() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@AfterSuite
public void closeBrowser() {
driver.close();
}
}
此外,您的 URL 中有错别字
driver.get("https://google.com");
在 BaseTest
中,您已将 WebDriver driver
实例初始化为 null,但您从未在 @BeforeSuite
设置中使用实际值更新引用。因此引用将始终为空,从而导致 NullPointerException 异常。在 @BeforeSuite
方法中,您完成了变量隐藏,而不是更新 driver
实例,您创建了名为 driver
的本地实例,但未能更新静态实例引用。
所需的更改是
@BeforeSuite
public void launchBrowser() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
}