Перейти к содержимому

Фотография

Грамотно ли я написал тестовый фреймворк на java? (нужна критика)

java testng selenium pageobject

  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 aleksSB

aleksSB

    Новый участник

  • Members
  • Pip
  • 2 сообщений

Отправлено 07 апреля 2020 - 21:57

Цель - в качестве практики написать тестовую модель по UI почты маил ру и автоматизировать подходящие под это дело тесты. Надо набивать руку, т.к. скоро намечается работа на должности автотестера.
Стек - java+seleniumWebDriver+pageObject+testng
Пока только 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);
        <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. Возможно еще есть какие-то архитектурные или синтаксические недочеты? Может что-то куда-то вынести можно или нужно?
 
Спасибо за ответы!

  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 08 апреля 2020 - 12:05

"1. Правильно ли я применил паттерн Page Object в принципе? Возможно, какие-то недочеты есть?"

 

 

 
не совсем, долго расписывать

"2 При создании письма на странице с общим списком писем всплывает попап нового письма. Он как бы находится на странице с общим списком писем, но также это сам по себе значительный элемент с большим кол-вом тестов. Поэтому я вынес его, как отдельную страницу. Это правильно? "
 

 

 

да
 
"3. Я узнаю на какой странице нахожусь по следующему явному ожиданию, который я добавил в конструктор каждой страницы. Правильно ли это?"

 

 

 
не понятно, зачем тебе это надо
 
 
"4.Во многих случаях я возвращаю объект страницы. Не избыточно ли это?"

 

 

избыточно, возвращать объект нужно для того, чтобы строить цепочки и уменьшать количество возможных вариантов, а ты и на typeLogin возвращаешь this

"5. В тестах, собственно, указал тестовые методы с помощью аннотаций @Test. Соответственно подготовительные действия перед каждым тестом я пометил с помощью @BeforeTest и @AfterTest соответственно. Но при запуске всего класса с тестами в таком случае @BeforeTest происходит однократно и все тесты одновременно в этом окне пытаются выполниться. Почему так может происходить? (проблема решилась тем, что фикстуры пометил как @BeforeMethod и @AfterMethod )
"

 

 

 
 
Вообще юзай ITestListener
 
 
"6. Какие нибудь тестовые данные (ссылки, названия кнопок, названия страниц и тд) наверняка можно вынести в какие-нибудь property файлы. Вот как это к проекту присобачить? Чтобы доставать из файлика, например, по getProperty(baseUrl)"

 

 

 
 
В проперти выносить логины, пароли, урлы(в гугле миллон примеров) 
Данные для тестов уже думай сам, вариантов миллион, от эксельки до БД
Различные сообщения, например, "Данные успешно удалены" просто хранить в классах-константах
 
"7. Этой строке место в классе с тестами? Может это можно указать где-то в настройках проекта?"

 

 

В селениде этого нет, еще есть webdrivermanager
 
 
"8. Планирую реализовать тестики и использовать окружение, библиотеки, инструменты максимально близкие к тем, что используются на реальных проектах. Что тут еще можете посоветовать, к чему стремиться? Стек точно java+selenium+pageObject+testNG+allure. Селениду позже буду осваивать."

 

 

 
я бы посоветовал java core
 
"9. Возможно еще есть какие-то архитектурные или синтаксические недочеты? Может что-то куда-то вынести можно или нужно?"

 

 

 
Вагон и тележка, берем класс LoginPage :

1.

private By loginLocator = By.xpath("//*[@id = 'mailbox:login']");
Зачем если есть ID ?
 
2.Не мешай явные Explicit и неявные Implicit  ожидания
 
3. Зачем это ?
 public LoginPage typeLogin(String login) {
        driver.findElement(loginLocator).sendKeys(login);
        return this;
    }
Почему просто нельзя заполнить поле ? Зачем этот метод для заполнения обычного инпута...

  • 1



Темы с аналогичным тегами java, testng, selenium, pageobject

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных