尝试在 webDriver 中使用 @FindBy 时获取 java.lang.NullPointerException

Getting java.lang.NullPointerException when trying to use @FindBy in webDriver

当我尝试使用@FindBy 注释在网页上查找元素时,我得到 java.lang.NullPointerException。

我的代码 -

public class pageObject{
  WebDriver driver;

  @FindBy(id = "email")
  WebElement searchBox;
  @FindBy(id = "u_0_v")
  WebElement submit;

  void pageObject(String web){
    FirefoxProfile profile = new FirefoxProfile();
    profile.setAssumeUntrustedCertificateIssuer(false);
    profile.setAcceptUntrustedCertificates(false);
    this.driver = new FirefoxDriver(profile);
    this.driver.get(web);
    this.driver.manage().window().maximize();
    this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    searchBox.click();
    searchBox.sendKeys("er");
    submit.click();
  }

  public static void main(String[] args){
    new pageObject("https://www.facebook.com/?_rdr=p");
  }
}

上面的代码出现异常 -

异常 -

Exception in thread "main" java.lang.NullPointerException
at com.Selenium_Practice.pageObject.<init>(pageObject.java:29)
at com.Selenium_Practice.pageObject.main(pageObject.java:35)

我也试过用

 @FindBy(how = HOW.ID , using = "email")  and @FindBy(how = HOW.ID , using = "u_0_v")

但再次得到相同的空指针异常

如果您使用 Selenium 的 PageFactory 并且希望您的 class 是自包含的*

,则首先需要初始化您的元素
pageObject(String web){

    FirefoxProfile profile = new FirefoxProfile();
    profile.setAssumeUntrustedCertificateIssuer(false);
    profile.setAcceptUntrustedCertificates(false);
    this.driver = new FirefoxDriver(profile);

    // You need to put this line in your constructor
    PageFactory.initElements(this.driver, this);

    // Then follows the rest of your constructor
    ...
}

* 意思是,你也可以在 class 之外初始化这个 classes 元素,但我想你想在里面做。