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

Техники локализации плавающих дефектов
онлайн, начало 17 августа
Школа для начинающих тестировщиков
онлайн, начало 20 августа
Программирование на Python для тестировщиков
онлайн, начало 14 августа
Тестирование без требований
онлайн, начало 17 августа
Фотография

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

java testng selenium pageobject

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

#1 aleksSB

aleksSB

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

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

Отправлено 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
  • 821 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 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


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн




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

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

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

Яндекс.Метрика
Реклама на портале