[英]NullPointerException uising PageFactory
I just started using page factory but I can seem to figure out what is causing the null point exception in my code.我刚开始使用页面工厂,但我似乎可以弄清楚是什么导致了我的代码中的 null 点异常。 Its most likely an issue with how I'm calling the driver but don't know how to resolve it
这很可能是我如何调用驱动程序但不知道如何解决它的问题
Managing my webdriver here在这里管理我的网络驱动程序
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();
}
}
The prep for my TC为我的 TC 做准备
public class Base {
@BeforeMethod
public void setup() {
Browser.setup();
Browser.driver.get("https://example.com");
}
@AfterMethod
public void quit() {
Browser.quit();
}
}
The page class with all the elements包含所有元素的页面 class
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();
}
}
I've tried adding the constructor method in the page call as well but it was a no go as well我也尝试在页面调用中添加构造函数方法,但它也不是 go
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)
You probably need to have a constructor in your LoginPage.java and define a private object for driver in that class something like this:您可能需要在 LoginPage.java 中有一个构造函数,并在 class 中为驱动程序定义一个私有 object ,如下所示:
private WebDriver driver;
public LoginPage(WebDriver driver) {
this.driver = driver;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.