【发布时间】:2021-04-26 10:17:12
【问题描述】:
我刚开始使用页面工厂,但我似乎可以找出导致代码中出现空点异常的原因。这很可能是我如何调用驱动程序但不知道如何解决它的问题
在这里管理我的网络驱动程序
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();
}
}
为我的 TC 做准备
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)
【问题讨论】:
-
在哪一行抛出异常?您必须提供堆栈跟踪以帮助我们了解您的问题...到目前为止,我唯一的猜测是无法找到您的一个(或全部)WebElement
-
抱歉,忘记了 :)
-
LoginPage loginPage @BeforeMethod public void createDriver() { loginPage = PageFactory.initElements(Browser.driver, LoginPage.class); }可以尝试在before方法中初始化并使用吗? -
你得到空指针的原因是,loginpage 没有被初始化,你试图访问空上的方法。
标签: java selenium page-factory