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

时间:2015-09-03 12:00:39

标签: java selenium nullpointerexception testng pageobjects

当我尝试使用@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")

但又得到了相同的空指针异常

1 个答案:

答案 0 :(得分:1)

如果你使用Selenium的PageFactory,你首先需要初始化你的元素,如果你希望你的类是自包含的*

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
    ...
}

*意思是,你也可以在课堂外初始化这个类元素,但我认为你想在里面做这个。