@Test(priority = 2, enabled = true)
public void testName() throws IOException, InterruptedException {
class SroPagesInitialization {
private DashboardPage dashboard = new DashboardPage(getDriver());
}
SroPagesInitialization sro = new SroPagesInitialization();
new BaseTest().teardown(); //Сессия завершается (1) (та, что была открыта при BeforeTest)
super.openSystem(); //Открывается новая
new SroBaseTest().authorizationSro(); //Авторизация нового тела (2), новой сессии
new ChsroBaseTest().init(); //init() ниже
// PageFactory.initElements(getDriver(), contracts); //Инициализация элементов одной страницы
sro.dashboard.contractsClick(); //Взаимодействие с элементами тела2
contracts.RandomContractInTableClick(); //Взаимодействие с элементами тела1 (прошлая завершенная сессия). Работать не будет, потому что прошлая сессия закрыта.
contractCard.ClickCalendarPlanTab(); // Аналогично
....
}
Создание объектов на страницы:
public void init() {
contracts = new ContractsPage(getDriver());
contractCard = new ContractCardPage(getDriver());
.....
}
Вопрос:
Как переинициализировать элементы страниц с прошлой сессии? На примере все работает если вставить PageFactory.initElements(getDriver(), contracts). Но очевидно это совсем не вариант.
(Условие, что не нужно тыкаться в SRO и кидать туда элементы/страницы. А в пределах запуска нового драйвера или текущей сессии).
Для ясности почему падает.: org.openqa.selenium.NoSuchSessionException: Session ID is null. Using WebDriver after calling quit()?
Драйвер статичный, но описан через ThreadLocal. Наследование между тестами есть, BaseTest и все такое.
Суть в том, что мы драйвер делим на зоны ответственности. И мне, в текущей ситуации необходимо зайти не в свою. Поэтому было принято решение: 1) мой BeforeTest инициализируется, процесс закрывается. 2) управление передается на BeforeTest тела2, т.е. не мой драйвер. 3) Делаются определенные действия с локаторами драйвера, которые он инициализировал со свой стороны. Т.е. например зайти на свой стенд/платформу, и т.п. 4) После чего тесты доходят до части, которая является “общей” и где с моей стороны локаторы и методы описаны, поэтому я хочу воспользоваться ими. 5) Проблема инициализации собственных локаторов.
Проблема не острая, т.е. она решаема, как например добавление и инициализация в тестах ContractsPage contracts = PageFactory.initElements(getDriver(), ContractsPage.class); или инициализация элементов “не в моем драйвере”. Но это очень плохой подход и хотелось бы сделать грамотно.
Я понимаю, что вероятно не понятно о чем идет речь, но и я не понимаю какую информацию дать, чтобы ситуация стала яснее.