【发布时间】:2020-07-10 17:41:42
【问题描述】:
我有 2 个类:ClassA,我试图从 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)
...
我尝试了不同的方法来调用另一个类的方法,但基本上控制台中的错误每次都是一样的。所以我想这不是问题的根源。 这就是为什么如果有人向我解释在我的情况下究竟是什么导致了这个错误,那就太好了。 提前致谢。
【问题讨论】:
-
驱动是B类的一个属性。使用 driver=ClassB.driver 也许?或者通过构造函数将classB传递给classA...这是一个架构问题,也许您只想在这里拥有一个类...如果使用两个,也许您的初始化方法在ClassB中,并且您将驱动程序返回给方法调用。 ..(如果 ClassB 仅用于实用方法...)
-
我不能在一堂课中全部使用它。我现在有不同的类,我试图通过使用其他类的方法来避免代码的重复。不管怎样,你提到的关于使用 ClassB 类的驱动程序的观点是正确的,它现在可以工作了!非常感谢。
标签: java selenium nullpointerexception testng