Автор: Филип Рик (Pilip Hric) Оригинал статьи Перевод: Ольга Алифанова
Принцип DRY = Don’t repeat yourself (не повторяйтесь).
End-to-end тесты иногда начинают повторять сами себя. Вы можете делать все, что в ваших силах, чтобы удерживать количество тестов на оптимальном уровне, но в некоторых случаях избежать повторяемости просто невозможно.
Приведу пример. Мы будем тестировать админ-интерфейс Slido. Slido дает пользователям возможность модерировать вопросы участников в ходе события. Одобренные вопросы отображаются для аудитории. В приложении есть различные фильтры вопросов, и у всех из них своя сортировка.
Пользователям по разным причинам может понадобиться сортировать входящие вопросы, а также живые, отмеченные звездой и архивированные.
В автоматизации довольно недавно. И это мой первый проект, стараюсь сделать все по уму.
Патерн PageObject, а в частности PageFactory показался мне интересным из-за возможностей инкапсуляции.
Описал страницы.
Написал свой первый тест.
Выглядит он примерно так:
@Test
public void refuse_to_client() {
MainPage mainPage = new MainPage(driver);
mainPage.loginToSystemByUser() //Логинимся на страницу 1
.openNewClient(client_ID).goToSystemDecisionPage().decisionRefuse() //Отказываем на странице 2
.addComment("Клиент некрасивый") //Добавляем комментарий по отказу на странице 3
.sendToWork() //Жмем Ок на странице 2
.sendToProcessing() //Отправляем на странице 1
}
Все выглядит относительно красиво. Но когда я стал крепить отчетность к этому тесту в виде Allure я понял, что вместо системы Test > Steps > Pages сделал просто Test > Pages, что не совсем корректно. Фигня вопрос подумал я и написал вариант №2
@Test
public void refuse_to_client() {
login();
appRefuse();
appDecisiobRefuse();
addingComment();
pressOKButton();
sendToProcessing();
}
@Step("Логинимся")
private void login() {
LoginPage loginPage = new LoginPage(driver)
loginPage.loginToSystemByUser()
}
@Step("Поиск заявки")
private void appSearch() {
MainPage mainPage = new MainPage(driver)
mainPage.openNewClient(appno);
}
@Step("Пользователю отказывают")
private void clientDecisionRefuse() {
appDecisionPage appDecisionPage = new AppDecisionPage(driver);
appDecisionPage.goToSystemDecisionPage().decisionRefuse();
}
@Step("Добавление комментария по отказу")
private void addingComment() {
CommentPage commentPage = new CommentPage(driver);
commentPage.addComment("Сам ты некрасивый");
}
@Step("Нажать ОК")
private void pressOkButton() {
FaTsmPage faTsmPage = new FaTsmPage(driver);
faTsmPage.sendToWork();
}
@Step("Отправка в обработку")
private void sendToProcessing() {
appDecisionPage appDecisionPage = new AppDecisionPage(driver);
appDecisionPage.SendToProcessing();
}
И вот тут у меня возник вопрос из-за того, что приходится создавать новые экземпляры страниц, а некоторые приходится создавать дважды (например appDecisionPage) как склеить @Step Allure и подход PageFactory?
Тесты выполняются. Отчет создается.
Аннотация добавляю @Step.
В pom настроены зависимости maven-surefire-plugin от junit и aspectjweaver. pom предоставить не могу, проект закрытый.
В allure-results:
"steps"[] - пустые - Почему?(