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();
}
}
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.