如何解决使用 PageFactory 的 NullPointerException
我刚开始使用页面工厂,但我似乎可以弄清楚是什么导致了我的代码中的空点异常。很可能是我打电话给司机的方式有问题,但不知道如何解决
在此处管理我的网络驱动程序
public class browser {
public static WebDriver driver;
public static void setup() {
ChromeOptions handlingSSL = new ChromeOptions();
handlingSSL.setAcceptInsecureCerts(true);
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver(handlingSSL);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
}
public static void quit() {
driver.quit();
}
}
我的杰出贡献者的准备
public class Base {
@BeforeMethod
public void setup() {
browser.setup();
browser.driver.get("https://example.com");
}
@AfterMethod
public void quit() {
browser.quit();
}
}
包含所有元素的页面类
public class LoginPage {
@FindBy (id = "username")
WebElement username;
@FindBy (id = "password")
WebElement password;
@FindBy (xpath = "//button[contains(text(),'Sign')]")
WebElement sign;
public void logIn(String userName,String passWord) {
username.sendKeys(userName);
password.sendKeys(passWord);
sign.click();
}
}
public class LoginPageTest extends Base {
LoginPage loginPage = PageFactory.initElements(browser.driver,LoginPage.class);
@Test
public void verifyLogintest(){
loginPage.logIn("user","pass");
}
}
java.lang.NullPointerException
at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
at com.sun.proxy.$Proxy10.sendKeys(UnkNown Source)
at pages.LoginPage.logIn(LoginPage.java:18)
at login.LoginPageTest.verifyLoginTest(LoginPageTest.java:16)
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:564)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
at org.testng.TestNG.run(TestNG.java:1031)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)
解决方法
您可能需要在 LoginPage.java 中有一个构造函数,并为该类中的驱动程序定义一个私有对象,如下所示:
private WebDriver driver;
public LoginPage(WebDriver driver) {
this.driver = driver;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。