diff --git a/NOTES.md b/NOTES.md
index 31fc08c..c1f0bfe 100644
--- a/NOTES.md
+++ b/NOTES.md
@@ -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`, который можно
@@ -21,11 +21,11 @@
- Помимо обычного `.gitignore`, есть еще его глобальная версия, которую обычно кладут
туда же, где лежит `.config`. За счет него можно почистить расшариваемый вариант, а также создавать
какие-то вспомогательные файлы, о случайном попадании в коммит которых не нужно беспокоиться. Крутецкая вещь.
-- Код выполняемый на странице в браузере можно остановить и поймать, например, спиннер загрузки товаров.
+- Код, выполняемый на странице в браузере, можно остановить и поймать, например, спиннер загрузки товаров.
### Досадные обстоятельства
- Использование Junit-овских софт ассертов не позволяет создавать подробные `message`- ы,
точнее позволяет, но для каждой переменной передаваемой в лямбду приходится делать
- ее `final` копию. То же относится и к Allure-овскому методу `step()`. Не нравится.
+ ее `(effectively) final` копию. То же относится и к Allure-овскому методу `step()`. Не нравится.
- Забавно, что судя по всему на сегодняшний день не существует вменяемого способа узнать
какую версию XPath использует браузер или его драйвер (по крайней мере для Хрома).
Остается только стучаться в методы, специфичные для разных версий, и смотреть какие из
diff --git a/README.md b/README.md
index 92aeb56..c8983b7 100644
--- a/README.md
+++ b/README.md
@@ -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 обходить капчи моими методами труднее, поэтому результат оставляет желать лучшего.
+Тем не менее посмотреть отчет можно по
+[этой ссылке](https://achitheus.github.io/SelenideTestCase/1),
+причем относительный интерес в нем, по понятным причинам, представляет собой только
+[этот удачливый тест](https://achitheus.github.io/SelenideTestCase/1/#behaviors/f8b8261c1ab4fe7e959d48ef5aa7a754/645c56ffa9ef53d1/).
+Как ни странно, могло быть и хуже (подробнее см. в заметке [Удаленное противо-captcha-стояние](automationCucumber/blob/main/NOTES.md#Удаленное-противо-Capcha-Стояние)).
+
+*Поэтому более
+целесообразным представляется выполнить...*
+
+#### Запуск локально и деплой отчета руками
+Здесь уже руки не связаны, поэтому [результат](https://achitheus.github.io/SelenideTestCase/local-run/)
+соответствующий.
## Требования
### Тест кейс
1. Открыть браузер и развернуть на весь экран.
@@ -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` с этим справиться удалось.