Skip to content

Commit

Permalink
markdown files update
Browse files Browse the repository at this point in the history
  • Loading branch information
Achitheus committed Nov 21, 2023
1 parent f8f7bfe commit 7d09186
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 23 deletions.
6 changes: 3 additions & 3 deletions NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
а значит его перехватывает селенидовский листенер, а значит делается лишний скриншот
и сохраняется лишняя страница. Исправить это можно, сделав метод через цикл со `Sleep`-ом и передавая в него
`Condition`, который используется для `SelenideElement.is(Condition)`, который не задействует ожидания и ничего не выбрасывает (в обычной ситуации).
-[ ] Надо бы переделать метод
-[x] Надо бы переделать метод
[`marketCheckAllPages()`](https://github.com/Achitheus/SelenideTestCase/blob/a49a8a2a2aa182f5570b3438b5d385e6bd77384c/src/test/java/ru/bellintegrator/ru/yandex/market/MarketTest.java#L82)
во что-то реюзабельное, например создать класс вроде `PagesChecker` и с помощью него делать проверки с прогоном по всем страницам. Сейчас же он по сути является частью конкретного
теста и захламляет класс тестов. Должен получиться отличный `helper`, который можно
Expand All @@ -21,11 +21,11 @@
- Помимо обычного `.gitignore`, есть еще его глобальная версия, которую обычно кладут
туда же, где лежит `.config`. За счет него можно почистить расшариваемый вариант, а также создавать
какие-то вспомогательные файлы, о случайном попадании в коммит которых не нужно беспокоиться. Крутецкая вещь.
- Код выполняемый на странице в браузере можно остановить и поймать, например, спиннер загрузки товаров.
- Код, выполняемый на странице в браузере, можно остановить и поймать, например, спиннер загрузки товаров.
### Досадные обстоятельства
- Использование Junit-овских софт ассертов не позволяет создавать подробные `message`- ы,
точнее позволяет, но для каждой переменной передаваемой в лямбду приходится делать
ее `final` копию. То же относится и к Allure-овскому методу `step()`. Не нравится.
ее `(effectively) final` копию. То же относится и к Allure-овскому методу `step()`. Не нравится.
- Забавно, что судя по всему на сегодняшний день не существует вменяемого способа узнать
какую версию XPath использует браузер или его драйвер (по крайней мере для Хрома).
Остается только стучаться в методы, специфичные для разных версий, и смотреть какие из
Expand Down
88 changes: 68 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,49 @@
## Содержание
- [Build (раздел в разработке)](#build-раздел-в-разработке)
- [Build](#build)
- [Запуск тестов](#запуск)
- [Сгенерировать отчет](#сгенерировать-отчет)
- [Allure отчет](#allure-отчет)
- [Запуск тестов и деплой отчета в CI](#запуск-тестов-и-деплой-отчета-джобой-github-actions)
- [Запуск тестов и деплой отчета руками](#запуск-локально-и-деплой-отчета-руками)
- [Требования](#требования)
- [Тест кейс](#тест-кейс)
- [Стек](#стек)
- [Прочее](#прочее)
- [Технические особенности](#технические-особенности)
- [Особенности реализации](#особенности-реализации)

## Build (раздел в разработке)
## Build
В окружении должна быть установлена (и прописана в PATH) java не ниже 11 версии
и добавлена переменная среды JAVA_HOME.
#### Запуск:

./mvnw verify -DuseBrowserProfile=false

#### Сгенерировать отчет:
- Если в окружении Allure не установлен:

./mvnw allure:install
./mvnw allure:serve

- Если в окружении Allure установлен (2.24.0 и выше):

cd ./target
allure serve
## Allure отчет

#### Запуск тестов и деплой отчета джобой (GitHub Actions)
При запуске в CI обходить капчи моими методами труднее, поэтому результат оставляет желать лучшего.
Тем не менее посмотреть отчет можно по
<ins>[этой ссылке](https://achitheus.github.io/SelenideTestCase/1)</ins>,
причем относительный интерес в нем, по понятным причинам, представляет собой только
<ins>[этот удачливый тест](https://achitheus.github.io/SelenideTestCase/1/#behaviors/f8b8261c1ab4fe7e959d48ef5aa7a754/645c56ffa9ef53d1/)</ins>.
Как ни странно, могло быть и хуже (подробнее см. в заметке <ins>[Удаленное противо-captcha-стояние](automationCucumber/blob/main/NOTES.md#Удаленное-противо-Capcha-Стояние)<ins>).

*Поэтому более
целесообразным представляется выполнить...*

#### Запуск локально и деплой отчета руками
Здесь уже руки не связаны, поэтому <ins>[результат](https://achitheus.github.io/SelenideTestCase/local-run/)</ins>
соответствующий.
## Требования
### Тест кейс
1. Открыть браузер и развернуть на весь экран.
Expand All @@ -31,32 +66,45 @@
Java, Junit Jupiter, Selenide, PageObject по стилю Selenide

### Прочее
- Тест разбит на шаги. Коллега без знаний программирования по аллюр отчету должен понимать что делает
-[x] Тест разбит на шаги. Коллега без знаний программирования по аллюр отчету должен понимать что делает
тест, какие проверки происходят
- Тест должен быть параметризован
- Необходимо использовать константы через проперти файл
- Все ассерты должны быть переопределены
- Если в коде используются циклы, необходимо исключить возможность бесконечного цикла
- Обязательно использовать Джава док для всех методов и переменных. На русском языке
- Недопустимо использования Thread.sleep и Трай\кетчи. За исключением, создания собственных
-[x] Тест должен быть параметризован
-[x] Необходимо использовать константы через проперти файл
-[x] Все ассерты должны быть переопределены
-[x] Если в коде используются циклы, необходимо исключить возможность бесконечного цикла
-[ ] Обязательно использовать Джава док для всех методов и переменных. На русском языке
-[x] Недопустимо использования Thread.sleep и Трай\кетчи. За исключением, создания собственных
ожиданий (к примеру каждый 5 миллисекунд проверяем что что-то случилось, и так не более 10 секунд.).
Лучше обойтись явными\неявными ожиданиями
- _Помните про универсальные методы. Старайтесь писать код, полезный в других тестах, полезный
-[x] _Помните про универсальные методы. Старайтесь писать код, полезный в других тестах, полезный
коллегам. Не будьте эгоистами!_
- XPath не должен содержать индексов, динамических элементов
-[x] XPath не должен содержать индексов, динамических элементов

## Особенности реализации

Раздел обновляется, а не переписывается, чтобы видеть прогресс.
- ***Судя по тест-кейсу при выставлении, например, производителя `Apple` наименования,
содержащие подстроку "IPhone", но не содержащие подстроку "Apple", являются корректными.
Автоматизированный тест не всегда соблюдает это условие - в демонстрационных целях
(чтобы было видно, что тест действительно выполняет проверку, а не просто рисует отчет с
зелеными галочками).***
- На каждой странице пагинации по товарам можно выполнять сколько угодно проверок, если
добавить их в `marketCheckAllPages()`. "Падение" какой-либо из проверок не прерывает тест
(использованы soft asserts).
- Даже если среди проверок не осталось "не упавших", тест не прерывается. Проверяются все страницы.
- При наличии на странице нескольких товаров некорректных с точки зрения конкретной проверки,
тест не говорит сколько этих товаров, не выводит их список, а сообщает о первом попавшемся.
- К сожалению упавшие софт-ассерты плохо отображаются в отчете: галочки/стрелочки не
добавить их в ~~`marketCheckAllPages()`~~. "Падение" какой-либо из проверок не прерывает тест
(использованы soft asserts).
**Update.** Эта ужасная функция удалена. Вместо нее использован `PageableChecker` (моя маленькая гордость).
- Даже если среди проверок не осталось "не упавших", тест не прерывается. Проверяются все чеки на всех страницах.
**Update.** Чтобы использовать дефолтный "lazy" режим, достаточно убрать из теста
`.checkAllPages(true)`. В таком случае страницы проверяются пока остается хотя бы один незафейленный чек.
При этом зафейленные чеки на последующих страницах не проверяются.
- При наличии на странице нескольких товаров некорректных с точки зрения конкретного чека,
отчет ~~не говорит сколько этих товаров, не выводит их список, а сообщает о первом попавшемся~~.
**Update.** Теперь и количество сообщает. Кроме того если "плохих" элементов больше одного, помимо скриншота и веб-страницы в аттачментах появляется файл,
в котором перечислены они все.
- ~~К сожалению упавшие софт-ассерты плохо отображаются в отчете: галочки/стрелочки не
меняют цвет с зеленого на красный. Пришлось тернарным оператором передавать разные
сообщения для успешного и неуспешного выполнения таких ассертов (для последнего случая
что-то бросающееся в глаза типа “`<<< FAIL >>> Имя товара не соотв…`”).
что-то бросающееся в глаза типа “`<<< FAIL >>> Имя товара не соотв…`”).~~
**Update.** Allure действительно официально не поддерживает `soft asserts`, но благодаря классу `AllureLifeCycle`
в `PageableChecker` с этим справиться удалось.



Expand Down

0 comments on commit 7d09186

Please sign in to comment.