Java Selenium/Junit/pageObject:NPE,在调用方法时,该方法单击通过@FindBy注释创建的元素
我有以下课程: 测试类,用于测试运行:Java Selenium/Junit/pageObject:NPE,在调用方法时,该方法单击通过@FindBy注释创建的元素,java,selenium,selenium-webdriver,junit,Java,Selenium,Selenium Webdriver,Junit,我有以下课程: 测试类,用于测试运行: public class MainPageTest { private WebDriver driver; private MainPage mainPage; @Before public void setUp() { System.setProperty("webdriver.gecko.driver", "src\\main\\resources\\geckodriver.exe");
public class MainPageTest {
private WebDriver driver;
private MainPage mainPage;
@Before
public void setUp() {
System.setProperty("webdriver.gecko.driver", "src\\main\\resources\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("http://github.com");
mainPage = new MainPage(driver);
}
@Test
public void signInTest() {
mainPage.clickSignIn();
}
}
和主页
,其中单击Signin()
和所需元素描述:
(返回的LoginPage
不会影响当前用例。)
当我试图运行@Test时,NPE失败了
java.lang.NullPointerException
单击登录(MainPage.java:33)
在MainPageTest.signInTest(MainPageTest.java:29)
但如果我们将主页中的方法更改为
public LoginPage clickSignIn() {
//signInButton.click();
driver.findElement(By.xpath("//a[text()='Sign in']")).click();
return new LoginPage(driver);
}
测试以绿色通过(按钮单击成功)
所以,问题是:我应该如何正确地使用
@FindBy
注释来创建/查找所需的webElements,以便在方法中按名称使用它们?您需要在MainPage类构造函数中调用PageFactory对象上的initElements方法
public MainPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
PageFactory.initElements
初始化用@FindBy
注释修饰的元素。如果不使用PageFactory
并且不手动初始化元素(例如通过赋值),将抛出NullPointerException
public MainPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}