для этого использую PageObject, тоесть в логике теста (сам класс теста) у меня нет передачи драйвера, ввода данных, сложных конструкций и локализации элементов - все выводится в методы соответствующих страниц-классов. Это удобно и нареканий нет.
НО у "правильных" тестов должно быть две особенности:
1. Тестируя и выполняя какое-то действия, они должны возвращать систему в исходное положение (убирать за собой).
2. Они должны быть независимы от предыдущих тестов. (каждый тест можно запустить отдельно и он сам делает подготовку нужного состояния)
Поэтому у меня два вопроса.
первый вопрос: Если я тестирую отправку письма, то тогда я должен буду за собой "убрать" тоесть удалить письмо из отправленных ( как вариант можно еще адресную книгу подчистить и удалить из удаленных писем тоже неплохо бы) Мой код:
public class MainFunctions extends BasicTestCase {
private LoginPage loginPage;
private HomePage homePage;
private IncomingPage incomingPage;
private SentPage sentPage;
private WriteLetterPage writeLetter;
@Test
public void testSendMail(){
loginPage = new LoginPage(driver);
loginPage.open();
homePage = loginPage.loginAs();
assertTrue(homePage.isLoggedIn());
incomingPage = homePage.enterIncomingPage();
writeLetter = incomingPage.clickWriteLetterBtn();
writeLetter.writeAndSendLetter();
assertTrue(writeLetter.isLetterSent());
sentPage = incomingPage.enterSentPage();
assertTrue(sentPage.isThereSentLetters());
sentPage.deleteLetter();
assertTrue(sentPage.isLetterDeleted());
}
}
В итоге я делаю в два раза больше кода. Надо ли? Почтовый ящик ведь безграничен (практически) и к тому же, возможно, будут тесты в которых убрать за собой будет в несколько раз сложней чем добавить туда, если вообще будет такая возможность...Вопрос второй: Допустим я тестирую базовую функциональность почты:
- Залогиниться
- Написать и отправить письмо
- Проверить сохранилось ли это письмо в отправленных
- Проверить можно ли удалить это письмо из отправленных.
получается если следовать правилу "все тесты должны быть независмыми" мне каждый тест кейс прийдется увеличивать на код предыдущего теста, тоесть чтобы в итоге проверить удалилось ли письмо из отправленных я должен залогиниться, написать письмо, увидеть его в отправленных, удалить от туда и еще все это ассертить после каждого шага.
Почему бы не использовать аннотации которые подвязывают тесты между собой чтобы каждый тест подготавливал состояние для исполнения следующего?
и завязывать бы как-то эти методы зависмые в отдельные группы.У аннотаций TestNG есть следующие параметры:
dependsOnMethods — методы, от которых зависит, сначала будут выполнены они, а затем данный метод
dependsOnGroups — группы, от которых зависит
Таким образом я протестировал возможность залогиниться, не выходя из теста я тестирую возможность отправки письма, после чего сразу тестирую сохранилось ли оно в отправленых и, опять же, не выходя из браузера тестировать удаление из отправленых. Все это одной цепочкой.
Что вы скажете, как оно на практике удобней и "правильней"? Хочу просто сразу научиться правильно тесты писать...

