Java 无法初始化WebDriver

Java 无法初始化WebDriver,java,selenium,webdriver,Java,Selenium,Webdriver,当我运行@testCase时,我得到了NullPointerException 1.在FrameworkTestCases.class->@BeforeClass中,我初始化所选webdriver的实例。当我作为jUnit测试启动FrameworkTestCases.class时,浏览器正在运行,但当我到达测试用例时,它会显示NullPointerException。原因是什么?我还使用了一个带有2个参数的构造函数将驱动程序从Generic.class继承到LoginPageFactory.cl

当我运行@testCase时,我得到了NullPointerException
1.在FrameworkTestCases.class->@BeforeClass中,我初始化所选webdriver的实例。当我作为jUnit测试启动FrameworkTestCases.class时,浏览器正在运行,但当我到达测试用例时,它会显示NullPointerException。原因是什么?我还使用了一个带有2个参数的构造函数将驱动程序从Generic.class继承到LoginPageFactory.class,但什么也没发生

以下是我的FrameworkTestCases类:

public class FrameworkTestCases {

static WebDriver driver;
private static String baseURl = "https://management.tacticlicks.com/";
static LoginPageFactory loginPage;
static Generic generic;
//WebDriver driver;
//static LoginPageFactory lpFactory;


@BeforeClass
public static void setUp() {        
    generic = new Generic(driver);
    generic.getDriver(baseURl, "chrome");
}

@Test
public void test() {
    System.out.println("Executing test");

    loginPage
    .fillUsernameField("ivailostefanov1989@gmail.com")
    .fillPasswordField("astral8909")
    .clickSubmit(); 
}


@AfterClass
public static void tearDown() {
    driver.quit();
}
}

public class LoginPageFactory extends Generic {

public LoginPageFactory(WebDriver driver2, Class<LoginPageFactory> class1) {
    super(driver2, class1);
    // TODO Auto-generated constructor stub
}

WebDriver driver;

@FindBy(name="email") //.//*[@id='login']/div[1]/div/div/table/tbody/tr/td[2]/div[1]/form/div[1]/input
WebElement loginUsernameField;

@FindBy(name="password")
WebElement loginPasswordField;

@FindBy(tagName="button")
WebElement loginSubmitButton;

public LoginPageFactory(WebDriver driver) {
    System.out.println("LoginPageFactory");
    this.driver = driver;
    PageFactory.initElements(driver, this);
}

public LoginPageFactory fillUsernameField(String username) {
    System.out.println("Before field initializing");
    WebElement emailField = driver.findElement(By.name("email"));
    emailField.click();
    emailField.sendKeys(username);
    return this;
}

public LoginPageFactory fillPasswordField(String password) {
    loginPasswordField.click();
    loginPasswordField.clear();
    loginPasswordField.sendKeys(password);
    return this;
}

public LoginPageFactory clickSubmit() {
    loginSubmitButton.click();
    return this;
}   
}

public class Generic {

WebDriver driver;

public Generic(WebDriver driver) {
    this.driver = driver;
}

public Generic(WebDriver driver2, Class<LoginPageFactory> class1) {
    // TODO Auto-generated constructor stub
}

private void getBrowser(String browser) {

    if (browser.equalsIgnoreCase("Firefox")) {
        File chromeDriver = new File("C:\\Users\\Ivo\\Desktop\\geckodriver.exe");
        System.setProperty("webdriver.gecko.driver", chromeDriver.getAbsolutePath());
        driver = new FirefoxDriver();
    } else if (browser.equalsIgnoreCase("Chrome")) {

        //set chromedriver property
        File chromeDriver = new File("C:\\Users\\Ivo\\Desktop\\chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath());
        driver = new ChromeDriver();


    } else {
        System.out.println("Browser cannot be launched");
    }

}

public WebDriver getDriver(String appUrl, String browser) {
    getBrowser(browser);
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    driver.manage().window().maximize();
    driver.get(appUrl);
    return driver;
}
}
公共类FrameworkTestCases{
静态网络驱动程序;
专用静态字符串baseURl=”https://management.tacticlicks.com/";
静态登录页面工厂登录页面;
静态泛型;
//网络驱动程序;
//静态物流工厂;
@课前
公共静态无效设置(){
通用=新的通用(驱动程序);
generic.getDriver(baseURl,“chrome”);
}
@试验
公开无效测试(){
System.out.println(“执行测试”);
登录页
.FillUserName字段(“ivailostefanov1989@gmail.com")
.fillPasswordField(“astral8909”)
。单击提交();
}
@下课
公共静态void拆卸(){
driver.quit();
}
}
公共类LoginPageFactory扩展了泛型{
public LoginPageFactory(WebDriver driver2,类别1){
超级(驾驶员2,1级);
//TODO自动生成的构造函数存根
}
网络驱动程序;
@FindBy(name=“email”)/../*[@id='login']/div[1]/div/div/table/tbody/tr/td[2]/div[1]/form/div[1]/input
WebElement loginUsernameField;
@FindBy(name=“password”)
WebElement loginPasswordField;
@FindBy(标记名=“按钮”)
WebElement登录提交按钮;
公共登录页面工厂(WebDriver){
System.out.println(“LoginPageFactory”);
this.driver=driver;
PageFactory.initElements(驱动程序,this);
}
public LoginPageFactory FillUserName字段(字符串用户名){
System.out.println(“字段初始化前”);
WebElement emailField=driver.findElement(By.name(“email”);
emailField.click();
emailField.sendKeys(用户名);
归还这个;
}
public LoginPageFactory fillPasswordField(字符串密码){
loginPasswordField.click();
loginPasswordField.clear();
loginPasswordField.sendKeys(密码);
归还这个;
}
公共登录页面工厂clickSubmit(){
loginSubmitButton.click();
归还这个;
}   
}
公共类泛型{
网络驱动程序;
公共通用(WebDriver驱动程序){
this.driver=driver;
}
公共通用(WebDriver driver2,类别1){
//TODO自动生成的构造函数存根
}
专用浏览器(字符串浏览器){
if(browser.equalsIgnoreCase(“Firefox”)){
文件chromeDriver=新文件(“C:\\Users\\Ivo\\Desktop\\geckodriver.exe”);
System.setProperty(“webdriver.gecko.driver”,chromeDriver.getAbsolutePath());
驱动程序=新的FirefoxDriver();
}else if(browser.equalsIgnoreCase(“Chrome”)){
//设置chromedriver属性
文件chromeDriver=新文件(“C:\\Users\\Ivo\\Desktop\\chromeDriver.exe”);
System.setProperty(“webdriver.chrome.driver”,chromeDriver.getAbsolutePath());
驱动程序=新的ChromeDriver();
}否则{
System.out.println(“无法启动浏览器”);
}
}
公共WebDriver getDriver(字符串appUrl、字符串浏览器){
getBrowser(浏览器);
driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
driver.manage().window().maximize();
获取驱动程序(appUrl);
返回驱动器;
}
}

@BeforeClass
方法中缺少变量赋值

改变

@BeforeClass
public static void setUp() {        
    generic = new Generic(driver);
    generic.getDriver(baseURl, "chrome");
}

而且您没有创建任何
LoginPageFactory
类的实例。您已经创建了一个变量
static LoginPageFactory loginPage但没有初始化它(至少在提供的代码中没有)。
方法

@Test
public void test() {
    System.out.println("Executing test");

    //add this line of code to initialize elements via Page Factory
    loginPage = new LoginPageFactory(driver);

    loginPage
    .fillUsernameField("ivailostefanov1989@gmail.com")
    .fillPasswordField("astral8909")
    .clickSubmit(); 
}

可能是重复的哦,非常感谢。现在它正在工作。我赞成你的答案,但我的声誉很低。你可以接受我的答案,而不是投反对票。在这种情况下,我们都可以获得声誉积分。您可以在这里阅读:
@Test
public void test() {
    System.out.println("Executing test");

    //add this line of code to initialize elements via Page Factory
    loginPage = new LoginPageFactory(driver);

    loginPage
    .fillUsernameField("ivailostefanov1989@gmail.com")
    .fillPasswordField("astral8909")
    .clickSubmit(); 
}