我想在同一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);
}
答案 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;
}
}