javaselenium-webdriverpageobjects

Selenium POM - "this.driver" is null


I am learning about POM Selenium + Java. I want to refactor class for tests. Right now I have one class but I want divide code into two class: one class will be for initializing browser with adnotations @BeforeClass and @AferClass and second will be with just @Test. When I refactor my code I get error java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.get(String)" because "this.driver" is null . My code only works if I have @After, @Before and @Test in one class.

My code for refactor:

public class TC1LoginRegisterUser {
    WebDriver driver;

    @Before
    public void setup() {
        driver = new ChromeDriver();
    }

    @Test
    public void test1() {
        HomePage homePage = new HomePage(driver);
        homePage.navigateToUrl();
    }

    @After
    public void teardown() {
        driver.close();
        driver.quit();
    }
}

My code after refactor:

public class BaseClass {

    WebDriver driver;
    @BeforeClass
    public void setup() {
        driver = new ChromeDriver();

    }

    @AfterClass
    public void teardown() {
        driver.close();
        driver.quit();
    }

}

public class TC1LoginRegisterUser extends BaseClass {
    @Test
    public void test1() {
        HomePage homePage = new HomePage(driver);
        homePage.navigateToUrl(); 
     }
}

Solution

  • To make your refactor work as expected, you should make method and driver variable static as far as @BeforeClass executes method when class instance has not been created yet, so non static entities are null.

    static WebDriver driver;
    
    @BeforeClass
    public static void setupAll() {
       driver = new ChromeDriver();
    }

    but I suggest to use @Before except @BeforeClass annotation in your Base class, that would allow you to make driver non-static.