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 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів