Объясните пожалуйста в чем прикол. Изначально был один тестовый класс, где была такая структура:
public class MainAlfadetaliTest extends TestBase {
private HomePage homepage;
private Login login;
private MainMenu mainMenu;
@BeforeTest
public void initPageObject() {
homepage = PageFactory.initElements(driver, HomePage.class);
login = PageFactory.initElements(driver, Login.class);
mainMenu = PageFactory.initElements(driver, MainMenu.class);
}
@BeforeTest
public void login() throws IOException, InterruptedException {
homepage.open();
login.inputEmail("ra-nt-office@yandex.ru");
login.inputPassword();
login.startLogIn();
login.confirmByEmail();
login.inputConfirmationCodeAndSubmit();
mainMenu.selectCompany();
mainMenu.selectStorage();
mainMenu.openSearchMenu();
mainMenu.openSearchDetailsForSale();
}
@Test
public void checkThatBuyerIsAddedInTheOrder() throws InterruptedException {
order.setBuyer();
order.checkThatTheBuyerIsAdded();
}
@AfterTest
public void cancelOrder() throws InterruptedException {
mainMenu.goToOrder();
order.cancelTheOrder();
}
Затем я добавил второй тестовый класс, где операции для подготовки к тесту примерно одинаковые, немного отличаются:
public class MainAlfadetaliTest extends TestBase {
private HomePage homepage;
private Login login;
private MainMenu mainMenu;
private SearchDetailsForSale searchDetailsForSale;
private Order order;
private TaskMenu taskMenu;
@BeforeTest
public void initPageObjects() {
homepage = PageFactory.initElements(driver, HomePage.class);
login = PageFactory.initElements(driver, Login.class);
mainMenu = PageFactory.initElements(driver, MainMenu.class);
searchDetailsForSale = PageFactory.initElements(driver, SearchDetailsForSale.class);
order = PageFactory.initElements(driver, Order.class);
taskMenu = PageFactory.initElements(driver, TaskMenu.class);
}
@BeforeTest
public void checkThatTheTaskForCreatingTransferRequestsHaveAppeared() throws IOException, InterruptedException {
homepage.open();
login.inputEmail();
login.inputPassword();
login.startLogIn();
login.confirmByEmail();
login.inputConfirmationCodeAndSubmit();
mainMenu.selectCompany();
mainMenu.selectStorage();
mainMenu.openSearchMenu();
mainMenu.openSearchDetailsForSale();
searchDetailsForSale.inputNameOfStorage();
searchDetailsForSale.complete();
searchDetailsForSale.findPartWithDefiniteQuantityAndClickTheMenuButton(1);
searchDetailsForSale.clickTheButtonAddingToOrder();
searchDetailsForSale.addThePartToOrder();
searchDetailsForSale.findPartWithDefiniteQuantityAndClickTheMenuButton(1);
searchDetailsForSale.clickTheButtonAddingToOrder();
searchDetailsForSale.addThePartToOrder();
mainMenu.goToOrder();
}
@Test
public void checkThatTheTaskForCreatingTransferRequestsHaveAppeared() throws InterruptedException {
taskMenu.openTaskMenu();
taskMenu.checkThatCurrentTaskIsRight(2, "Создать заявки на перемещение");
}
@AfterTest
public void cancelOrder() throws InterruptedException {
mainMenu.goToOrder();
order.cancelTheOrder();
}
Если запустить второй класс, то вылетит ошибка “NullPointerException”. Но если во втором классе перед названием второго метода второго @BeforeTest написать login (то есть название метода будет “logincheckThatTheTaskForCreatingTransferRequestsHaveAppeared”), то тогда тесты отработают на ура. Тоже самое и с методом первого @BeforeTest. Сейчас этот метод с таким же названием как и в первом классе, и если название просто дописать(то есть initPageObjectdlsjflsjdfjsldfjlksdjflksdjf ), то все будет работать, но если вначале названия не будет стоять “initPageObject”, то опять будет ошибка “NullPointerException”. Объясните пожалуйста почему так?