Цель - в качестве практики написать тестовую модель по UI почты маил ру и автоматизировать подходящие под это дело тесты. Надо набивать руку, т.к. скоро намечается работа на должности автотестера.
Сам проект - https://github.com/a...matizationTests
Стек - java+seleniumWebDriver+pageObject+testng
Пока только 3 тестика написал, и нужно понять, архитектурно и синтаксически правильно ли я всё делаю, чтобы можно было продолжать.
Что планирую добавить и какие проблемы решить:
- Убрать Thred.sleep-ы, корректно обработать ожидания появления/скрытия элементов
- Написать более интуитивно понятные названия методов, переменных.
- Вынести некоторые захардкоженные значения.
- Добавить какой нибудь конфигуратор отчетов - allure, например.
- Добавить в итоговой реализации 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); <b>emailsListPage.deleteEmail();</b> 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. Возможно еще есть какие-то архитектурные или синтаксические недочеты? Может что-то куда-то вынести можно или нужно?
Спасибо за ответы!