Почему в Cucumber часто используют шаги по взаимодействию с элементами вместо крупных бизнес-шагов
Что проверяют
Отличаете ли вы вопрос-ловушку. Мелкие шаги про клики это не рекомендация, а типичное вырождение BDD, и от вас ждут объяснения, почему так выходит и чем это плохо.
Как отвечать
Сначала честно назвать причины, по которым команды так пишут:
- быстрый старт: универсальные шаги вида «я нажимаю кнопку» и «я ввожу значение в поле» пишутся один раз и копируются в любой сценарий, предметную область продумывать не нужно;
- иллюзия переиспользования: одинаковых технических шагов действительно много, а бизнес-шаги кажутся одноразовыми;
- сценарии пишет только автоматизатор, аналитик и заказчик в файлы сценариев не заглядывают, и язык естественно съезжает к интерфейсу.
Дальше объяснить цену. Gherkin задуман как живая документация поведения: сценарий читает человек, который не знает вёрстки. Императивный сценарий на тридцать строк про поля и кнопки нечитаем, ломается от любой правки разметки и превращает Cucumber в дорогую обёртку над обычным Selenium-тестом, без единого преимущества перед кодом.
Правильный ответ: шаги декларативные, на языке предметной области, а механика прячется в объекты страниц и в подготовку данных через API.
Дано пользователь авторизован как администратор
Когда он переводит заказ в статус «Оплачен»
Тогда клиенту уходит уведомлениеПолезно упомянуть состояние между шагами: контекст сценария внедряется через PicoContainer или Spring, а не хранится в статическом поле.
Где спотыкаются
Отвечают списком плюсов из статьи: читаемость, переиспользование, простота поддержки. Как раз всё перечисленное и страдает, а такой ответ показывает, что человек шаги писал, но про них не думал.
Второе: тащат локаторы в сам файл сценария. Строка с XPath внутри сценария убивает идею формата, и при редизайне править приходится документацию вместо кода.
Третье: хранят состояние в статических полях. Пока запуск однопоточный, это работает, а при параллельном прогоне сценарии начинают перетирать данные друг друга, и падения становятся плавающими.