Как стать автором
Обновить

Комментарии 19

Видно, что написано из практики, хоть и немного сумбурно.

Про локаторы- в идеале бы договориться с разрабами о системе уникальных id для элементов.
Отчеты на чем делаете? Allure пробовали?

Про id, используем кастомный атрибут [selenide-id="something"] так как #id автогенерируемый и используется для других целей. Отчеты минимальны, gradle/testng. Про allure, да локально поднимаю, визуально приятный инструмент, глядя на него подметила что забыла написать про аннотации и приоритеты.

А запуск тестов руками или через Jenkins или подобное?

crontab на gitlab ci/cd

Есть ещё современная связка Gauge + Taiko. Gauge - мультиязыковой движок тестов (js, Python, etc). Taiko - средство работы с браузерами.

«Флоки» сильно режет глаза, это что-то из ирландского диалекта?)

Ждем перевода для русского коммьюнити )

1) Явные / неявные ожидания напутали.

2) "Из под коробки" странно звучит. Корректно "из коробки" ll "из под капота".

3) В пирамиде потеряли минимум 1 слой. API тестирование например.

4) На Js можно и нужно писать автотесты. Выбор фреймворков великолепный: Playwright, WebdriverIO, Cypress, Puppeteer и прочее. При этом у многих принцип plug and play + поддержка API тестирования.

Возможно, я переструктурировала параграф с локаторами, опираясь на эти ссылки, selenium и stepik, настройка ожиданий. Из под капота действительно звучит точнее, поправила) Да, в промежутке есть api (service) тестирование, к сожалению пока им не занималась. Про js затрудняюсь ответить.

Мне кажется что js/ts экосистема для ui тестов намного больше и обширнее, чем c#.

Про вынесение selectors в отдельный файл и отрывание  их от контекста использования, имхо довольно спорное решение.

Почитайте про EOM (element object model ), узнаёте много нового

Хмм, интересно, спасибо за сводку)
выделение локаторов помогло избежать их исправления во всех тестах где он используется, думаю тут нужно ориентироваться по проекту))

информативно)
спасибо автору

Хм, интересно, поспрашиваю:

  1. 500 элементов это будет пока и легко разбираться если сам сидишь и кодишь + явно будут конфликты и придется их решать. Тут хорошо сказали про практику EOM. Создаем отдельный интерфейс - к примеру попап который есть к примеру на каждой странице и описываем его элементы и можно даже их действия над ними. И в принципе все, любое изменение сразу понятно куда идти и что править. А потом для тестов можно просто собрать нужные нам элементы в страничку.

  2. А почему не сразу веб-элементы записывать чтобы было к примеру danger_button.click(), а не селекторы?(и да добавьте тогда идентификатор в пример, а то одно локаторы)

  3. Немного непонятно про расширение селекторов, почему не используются $(byText()), $(withText()), $(byTitle()) и прочие?

  4. x-path - как говорится, просто не умеете их готовить) Есть плагины в chrome которые могут выдать достаточно приятный и короткий селектор, плюс сразу можно использовать поиск по тексту(под капотом селенида так и работает)

    Плюс решение коллекции, совсем не решает проблему поиска элемента по индексу, так же с добавлением элемента в эту коллекцию тест начнет падать, поскольку его индекс изменился(ну или нет). Как вариант доп. поиск внутри коллекции, тот же текст, ну или класс.

  5. Assertation в одну строку выглядит не очень, особенно если не включены Soft Assert, иначе всегда будет падать первое исключение(Правда есть минус - включается на все тесты сразу)

  6. Про LocalStorage - тут у вас непонятно зачем и почему, есть возможность получить и скинуть токен, но для чего и почему не скинуть весь сразу?)

  7. Состав кейса с его расшифровкой - не оч удобно читать, лучше б в одном порядке.

  8. Не TDD, а все ж BDD - вы описываете поведение пользователя кликами на кнопки и прохождение сценария, TDD немного про другое https://habr.com/en/post/459620/.

  9. Все ж переименуйте обратно Флоки во Flacky, все ж устоявшийся уже термин - а то Рагнар прибежит)

  10. Кхм, а отключение js в браузере не слетает когда открывается чистый конфиг от вебдрайвера?

И просто ради интереса $$(DANGER_BTN) имеет локатор как - "danger-btn"?)

Вот это я понимаю обратная связь)
1. Да, я единственный тестировщик в команде (пока), конфликтов пока не видала. P.S буду морально готовится )
Кажется натыкалась на такую проблему, когда компоненты с одной страницы повторяются (тут уже точно что-то другое чем POM) , создала отдельный класс, к примеру FileDownloadManager, который управляет всеми действиями связанный с этим элементом, это можно применить к EOM который вы описали?
2. Тут уже дело привычки, для меня удобней визуально воспринимать что все что начинается со знака доллара это уже веб элемент
3. Это тоже одни из замечательных расширений селенида, но тут ссылаюсь к пункту №2
4. Почему же) Xpath довольно простой но громоздкий ) (Хотя, до понятия что такое коллекция тоже использовала его))

// Using xpath
$(By.xpath("(//div[@class=\"first-table\"]//td[@class=\"check\"])[1]"))
// get from elements collection
$$("div.first-table td.check").get(1)

Пока с той проблемой что не находит по индексу не сталкивалась, разве что добавила проверку на size и это помогло
5. Да, это прям жиза, а что вы имеете ввиду Assertation в одну строку?
6. Чтобы моментально разлогиниться, а если серьезно то иду по плану тест кейса
7. Добавить комментами внутри блока кода?
8. Разве BDD это не Given-When-Then? Тоже долго думала куда лучше отнести к TDD or BDD?
9. Окей)
10. Нет, не слетает, js отключается и тесты падают =)
DANGER_BTN это просто пример

Кажется натыкалась на такую проблему, когда компоненты с одной страницы повторяются (тут уже точно что-то другое чем POM) , создала отдельный класс, к примеру FileDownloadManager, который управляет всеми действиями связанный с этим элементом, это можно применить к EOM который вы описали?

Ага, если пообщаетесь с фронтами они покажут как они структуру такую делают с каждым элементом и как наполняют страницу)

Добавить комментами внутри блока кода?

Можно и так

Да, это прям жиза, а что вы имеете ввиду Assertation в одну строку?

Меня тут скорей смущают куча параметров, но мб это в качестве примеров тут)

shouldBe(exist, enabled, visible)
  .shouldHave(attribute("title", "myTitle"), text("TEXT"));

Разве BDD это не Given-When-Then? Тоже долго думала куда лучше отнести к TDD or BDD?

Неее, это нотация Gherkin, являющейся самой популярной сейчас для bdd. И многие теперь считают что нотация и есть сам принцип. Но это не единственное условие, его может и не быть, и он может быть представлен обычным тест-кейсом(ну это если упрощенно, можно еще про это тут почитать https://www.uml2.ru/partners/5004/)

Да, я недавно начала изучать angular, мне действительно понравилась структура компонентов, то что к ней относятся и как они взаимодействуют, это круто)

Куча Assertation (Condition...) параметров, просто для примера, с ответом на вопрос, а что так тоже можно было написать?)

Спасибо, отличное разъяснение, теперь я действительно начала понимать различия между tdd и bdd. Получается tdd как один из способов безопасного проектирования, а bdd как один из способов описания (поведения) взаимодействия?

"Длинный локатор не проблема, когда он вынесен в отдельный файл с локаторами:"

Почему классы в статье называются файлами?

Idea -> create new file -> java class, думаю эти шаги поспособствовали данному утверждению)

Спасибо большое автору за статью! Действительно полезно)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации