Цель - в качестве практики написать тестовую модель по UI почты маил ру и автоматизировать подходящие под это дело тесты.
Сам проект -
https://github.com/aleks70694/WebMailRuAutomatizat...
Пока только 3 тестика написал, и нужно понять, архитектурно и синтаксически правильно ли я всё делаю, чтобы можно было продолжать.
Что планирую добавить и какие проблемы решить:
1. Убрать Thred.sleep-ы.
2. Написать более интуитивно понятные названия методов, переменных.
3. Вынести некоторые захардкоженные значения.
4. Добавить какой нибудь конфигуратор отчетов - allure, например.
5. Добавить в итоговой реализации cucumber.
Вопросы следующие:
1. Правильно ли я применил паттерн Page Object в принципе? Возможно, какие-то недочеты есть?
2. При создании письма на странице с общим списком писем всплывает попап нового письма. Он как бы находится на странице с общим списком писем, но также это сам по себе значительный элемент с большим кол-вом тестов. Поэтому я вынес его, как отдельную страницу. Это правильно? Или нужно было создать внутренний класс этого попапа в EmailsListPage (классе страницы с общим списком писем)?
3. Я узнаю на какой странице нахожусь по следующему явному ожиданию, который я добавил в конструктор каждой страницы. Правильно ли это?
new WebDriverWait(driver, 10)
.until(ExpectedConditions.presenceOfElementLocated(title));
4. Во многих случаях я возвращаю объект страницы. Не избыточно ли это? Насколько я понимаю, драйвер и без этого понимает, что на странице произошли изменения, т.е. мне не нужно присваивать переменной страницы, с которой я буду работать дальше, возвращенный методом объект страницы.
public EmailsListPage deleteEmail () {
driver.findElement(contextMenuDelete).click();
return new EmailsListPage(driver);
}
@Test
public void deleteEmail() throws InterruptedException{
EmailsListPage emailsListPage = new EmailsListPage(driver);
int emailsCountBefore = emailsListPage.getCountEmailList();
emailsListPage.rightClickByEmail(emailsListPage.getEmailList(), 0);
emailsListPage.deleteEmail();
Thread.sleep(1000);
int emailsCountAfter = emailsListPage.getCountEmailList();
Assert.assertTrue((emailsCountBefore-1) == emailsCountAfter);
}
5. В тестах, собственно, указал тестовые методы с помощью аннотаций @Test. Соответственно подготовительные действия перед каждым тестом я пометил с помощью @BeforeTest и @AfterTest соответственно. Но при запуске всего класса с тестами в таком случае @BeforeTest происходит однократно и все тесты одновременно в этом окне пытаются выполниться. Почему так может происходить? (проблема решилась тем, что фикстуры пометил как @BeforeMethod и @AfterMethod )
6. Какие нибудь тестовые данные (ссылки, названия кнопок, названия страниц и тд) наверняка можно вынести в какие-нибудь property файлы. Вот как это к проекту присобачить? Чтобы доставать из файлика, например, по getProperty(baseUrl) данные.
7. Этой строке место в классе с тестами? Может это можно указать где-то в настройках проекта?
System.setProperty("webdriver.chrome.driver", "src\\main\\resources\\chromedriver.exe");
8. Планирую реализовать тестики и использовать окружение, библиотеки, инструменты максимально близкие к тем, что используются на реальных проектах. Что тут еще можете посоветовать, к чему стремиться? Стек точно java+selenium+pageObject+testNG+allure. Селениду позже буду осваивать.
9. Возможно еще есть какие-то архитектурные или синтаксические недочеты? Может что-то куда-то вынести можно или нужно?
Спасибо!