Я предполагаю, что в тот момент, когда у вас инициализируется страница - driver == null.
ну на самом деле у меня в классе LoginTests не один тест, а несколько.
Если не планируете реализовывать PageManager - делаете в классе LoginTests метод:
private LoginPage loginPage() { if (loginPage == null) { loginPage = new LoginPage(driver); } }В методах-тестах используете уже не элемент loginPage, а метод loginPage().
Если элемент уже будет создан - все ок, будет использован он. Если его вдруг ещё не будет - он будет создан и инициализирован.
Но у Вас есть другая проблема.
Вы (в данный момент) инициализируете страницу при создании класса с тестами. Один раз.
А вот драйвер у Вас пересоздается заново перед каждым методом (стоит аннотация BeforeMethod, а не BeforeClass). Т.е. теоретически - и при Вашем текущем варианте, и при использовании предложенного выше метода - объект страницы уже на втором тесте будет ссылаться на несуществующий driver. В данном случае я имею ввиду, что из-за BeforeMethod "предыдущий" браузер будет закрыт после предыдущего теста, а для этого теста - будет открыт уже новый браузер, о котором объект страницы и знать не знает (он продолжает ссылаться на "старый" driver).
Тут два варианта:
1. все ваши тесты в этом классе НЕ требуют запуска нового браузера (м.б. нужен просто переход на "главную" страницу). Тогда лучше изменить аннотацию - браузер будет инициализироваться один раз перед запуском первого теста этого класса. Главное не забыть тогда и у tearDown аннотацию сменить.
2. всем тестам нужен новый браузер. Тогда страницу придется переинициализировать заново для каждого теста, чтобы она "знала" про переоткрытый заново браузер.
Вообще - мне кажется более оптимальным вариантом использование PageManager.
Драйвер создается один раз (BeforeClass) и передается в конструктор PageManager.
PageManager рулит страницами, создаёт их, когда нужно - инициализирует имеющимся у него драйвером.
Тесты ничего не создают и не инициализируют - только используют страницы, запрошенные у PageManager (как он их создаёт / инициализирует и т.д. - сами тесты волновать не должно, т.к. это не их задача).
Спасибо большое за совет с PageManager. Раньше про такое не слышал и поэтому чуть позже обязательно попробую. Сейчас решил проблему следующим образом:
Мои методы создания и закрытия драйвера с аннотациями @BeforeMethod и @AfterMethod находятся в родительском классе BaseTest (как я и писал в самом начале). А в классах с тестами я создал дополнительно метод также с аннотацией @BeforeMethod и запихнул туда инициализацию объектов, которые встречаются в тестах данного тестового класса и получается следующая картина: я запускаю тест, сначала отрабатывает метод из родительского класса, в которых создает драйвер, потом отрабатывает метод непосредственно из тестового класса, который создает нужные мне объекты, а потом уже отрабатывает сам тест, после чего метод из родительского класса закрывает браузер. Вот собственно и всё решение.