Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium/Junit/pageObject:NPE,在调用方法时,该方法单击通过@FindBy注释创建的元素_Java_Selenium_Selenium Webdriver_Junit - Fatal编程技术网

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);
}