为什么在类文件中一次使用PageFactory initElements会给出错误

时间:2018-12-01 04:48:47

标签: java selenium

我想在同一java类中使用PageFactory initElements,并且也只能使用一次。 它给了我一个NullPointerException错误。
但是,如果我在每个班级输入用户名和密码时都使用它,则不会出现错误。

import org.openqa.selenium.support.PageFactory;

public class LoginFeature {

@FindBy(how=How.XPATH,using="//input[@placeholder='Username']")
WebElement objUserName;
@FindBy(how=How.XPATH,using="//input[@placeholder='Password']")
 WebElement objPwd;
@FindBy(how=How.XPATH,using="//a[@onclick='return ValidateLogin()']")
WebElement objLoginButton;

public LoginFeature(){
    PageFactory.initElements(config.driver, this);
}
public void EnterURL(String enterURL) throws InterruptedException{
    config.driver.get(enterURL);
    Thread.sleep(2000);
}
public void Enterusername(String uname)
{
//PageFactory.initElements(config.driver, this); This does not give an   error. But I do not want to use it in each class separately
objUserName.sendKeys(uname);
}
public void EnterPwd(String pwd)
{
//PageFactory.initElements(config.driver, this);
objPwd.sendKeys(pwd);
}

1 个答案:

答案 0 :(得分:0)

@FindBy(how=How.XPATH,using="//input[@placeholder='Username']")
WebElement objUserName;

上面的代码等同于下面的代码

WebElement objUserName = driver.findElement(By.xpath("//input[@placeholder='Username']"));

现在,当您使用LoginFeature类的对象

初始化页面时
PageFactory.initElements(config.driver, this);

,如果您的driver未初始化,那么您使用driver访问的任何内容都会抛出NullPointerException。例如您的第一个页面对象被初始化,并且在您使用它时就会发生异常。

尝试像这样初始化浏览器

public class LoginFeature {

public LoginFeature(){
    initializeDriver();
    PageFactory.initElements(config.driver, this);
}

public void initializeDriver(){
 config.driver=new ChromeDriver; 
}
  }