尝试从另一个 class Java Selenium TestNG 调用方法后出现 NullPointerException 错误
NullPointerException error after trying to call a method from another class Java Selenium TestNG
我有 2 个 classes: ClassA,我试图从 class ClassB:
中调用方法
public class ClassA {
WebDriver driver;
@Test
public void methodA() {
ClassB.methodB();
driver.get("https://example.com");
}
}
还有 ClassB,其中存在所需的方法:
public class ClassB {
static WebDriver driver;
public static void methodB() {
System.setProperty("webdriver.chrome.driver", "E:\Autotests\Drivers\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().deleteAllCookies();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
}
}
但是根本不管用。我成功地使用 methodB 打开浏览器,但是 URL 无法打开并且在控制台中我看到错误:
java.lang.NullPointerException
at autotests_groups_v1.ClassA.bookingProcess(BookingAnonyomus.java:20)
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)
...
我尝试了不同的方法从另一个 class 调用该方法,但基本上每次控制台中的错误都是相同的。所以我想这不是问题的根源。
这就是为什么如果有人向我解释在我的案例中究竟是什么导致了这个错误会很好。
提前致谢。
当您调用 ClassB.methodB();
时,您会初始化 ClassB
中的 driver
字段。然后,当您从该方法 return 继续 driver.get("https://example.com");
时,您正在使用 ClassA
的 driver
字段,因此您显然会得到 NPE,因为它仍然是 null
。
我有 2 个 classes: ClassA,我试图从 class ClassB:
中调用方法public class ClassA {
WebDriver driver;
@Test
public void methodA() {
ClassB.methodB();
driver.get("https://example.com");
}
}
还有 ClassB,其中存在所需的方法:
public class ClassB {
static WebDriver driver;
public static void methodB() {
System.setProperty("webdriver.chrome.driver", "E:\Autotests\Drivers\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().deleteAllCookies();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
}
}
但是根本不管用。我成功地使用 methodB 打开浏览器,但是 URL 无法打开并且在控制台中我看到错误:
java.lang.NullPointerException
at autotests_groups_v1.ClassA.bookingProcess(BookingAnonyomus.java:20)
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)
...
我尝试了不同的方法从另一个 class 调用该方法,但基本上每次控制台中的错误都是相同的。所以我想这不是问题的根源。 这就是为什么如果有人向我解释在我的案例中究竟是什么导致了这个错误会很好。 提前致谢。
当您调用 ClassB.methodB();
时,您会初始化 ClassB
中的 driver
字段。然后,当您从该方法 return 继续 driver.get("https://example.com");
时,您正在使用 ClassA
的 driver
字段,因此您显然会得到 NPE,因为它仍然是 null
。