Selenium + Selenide +JUnit + Java + Page Object = Вопрос
Всем доброго времени суток. Есть несколько вопросов по написанию UI автотестов с Selenide.
Дано:
— Back End портал. На котором есть несколько ролей пользователей (к примеру: главный администратор, и администратор).
— Selenium + Selenide +JUnit + Java + Intellij IDEA(Maven)
— 1 начинающий тестировщик.
— 20 автотестов, которые предположительно независимы друг от друга, но что-то мне подсказывает, что моя реализация не особо правильная...
Ожидаемый результат:
— Выстроить правильную архитектуру проэкта, чтобы в дальнейшем если и менять что-то — то по минимуму.
— Сделать автотесты поддерживаемымы и независимыми.
Есть класс для логина:
public class Login { public Login loginAsMainAdmin(){ open("http://"); $(By.xpath(".//*[@id='loginform-email']")).setValue("some_email"); $(By.xpath(".//*[@id='loginform-password']")).setValue("some_password"); $(By.xpath(".//*[@id='login-form']/button")).pressEnter(); return new Login(); }
Он используется каждый раз при начале нового теста из тест сьюита.
Есть package с PageObject -ами для всез страниц, к примеру главная:
public class DashboardPage extends Login { public DashboardPage() { // Логин под главным администратором Login loginAsMainAdmin = new Login(); loginAsMainAdmin = loginAsMainAdmin(); } public String getDashboardElements(){ return $(By.xpath("html/body/div[1]/div[2]/div/ul/li[2]/a/span[2]")).getText(); } public ElementsCollection menu(){ return $$("li.start"); }Проверок пока минимум, возвращаю имя залогиненного пользователя, и элементы меню. Далее в тестах проверяю количество и совпадение текста.
Подготовка к тесту:
@Before public void testSetUp (){ //CHROME Browser Configuration.browser = "chrome"; System.setProperty("webdriver.chrome.driver", "D:\\webdriver\\chromedriver_win32\\chromedriver.exe"); System.setProperty("selenide.browser", "Chrome"); //FIREFOX Browser //SAFARI Browser //IE Browser //EDGE Browser } @After public void testShutDown (){ WebDriverRunner.clearBrowserCache(); }
Запускаю Хром и в конце каждого теста — чищу кэш.
А теперь сам тест:
@Test public void DashboardTest (){ DashboardPage onDashboardPage = new DashboardPage(); onDashboardPage.getDashboardElements().contains("Admin"); onDashboardPage.menu().shouldHaveSize(12).shouldHave(CollectionCondition.texts( "some text")); System.out.println("Dashboard page is present !)"); }
Под разными ролями (главный администратор, администратор) — некоторые страници сузествуют только под одной из ролей, остальные немного отличаются друг от друга, и соответственно xpath у элементов меняется, в зависимости от роли.
А теперь вопросы:
1. Мне кажется неправильным в каждом тесте логиниться (сделал это для независимого запуска) , подскажите, есть ли более правильное решение.
2. Нужно ли создавать отдельно package с PageObject-ами для роли администратора, или можно добавить в каждый PageObject проверку, чтобы знать из какого тест сьюита запускается тест и возвращать элементы по необходимому xpath-у, не приведет ли это к усложнению поддерживаемости?
3. Как улучшить имеюзуюся архитектуру («архитектура» — довольно громко звучит... не ругайте сильно...)?
4. Стоит ли использовать JUnit или переходить на TestNG, будут ли преимущества? И насколько это оправдано на данном этапе?
5. Нужно ли проверять верстку скриншотами (верстка портала еще не доведена до конца)?
6. Критика, пожелания и предложения приветствуются.
Заранее спасибо всем откликнувшимся.
24 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів