---
title: "Действия"
id: "1999"
type: "page"
slug: "actions"
published_at: "2026-09-20T16:13:21+00:00"
modified_at: "2026-09-28T14:59:36+00:00"
url: "https://pastukhov.com/agents/test/docs/actions"
markdown_url: "https://pastukhov.com/agents/test/docs/actions.md"
excerpt: "Правило проверяет одну страницу. Но большинство проблем живёт в пути по интерфейсу: вошли, открыли оплату,…"
---

# Действия

[https://pastukhov.com/agents/test/docs/actions.md](https://pastukhov.com/agents/test/docs/actions.md)

Правило проверяет одну страницу. Но большинство проблем живёт в пути по интерфейсу: вошли, открыли оплату, заполнили форму. Действие — это такой путь, записанный один раз и повторяемый сколько угодно. Без действий тесты не смогли бы пройти дальше первой страницы. Ниже — как записать действие и на что опирается его надёжность.

## Что такое действие

Сценарий работы с интерфейсом: открыть адрес, заполнить поле, выбрать значение, нажать кнопку, дождаться перехода на другую страницу. Действие можно **записать** своими руками или **описать словами** и получить от агента. И то и другое лежит обычным файлом в папке проекта.

## Запись

1. Включите запись в панели дополнения — на значке появится красная отметка.
2. Поработайте на сайте как обычно: войдите, перейдите в нужный раздел, заполните форму.
3. Остановите запись — шаги покажутся списком. Лишние можно удалить, у любого шага поправить значение.
4. Дайте действию понятное имя и сохраните.

Нажатия и ввод внутри самой панели в запись не попадают: продукт не записывает работу со своим же окном.

## Секреты, среды и переменные

Если во время записи вы вводите пароль, в файл вместо значения подставляется имя переменной — действие читает его как `ctx.vars.имя`. Так пароль не окажется в истории правок, которую видят все, кому открыт доступ к коду проекта. При сохранении продукт напомнит об этом ещё раз — на случай, если вы записали что-то чувствительное в обычное поле.

Сами значения живут в проекте отдельно от файлов. **Учётные данные** (пароли, токены, заголовки) лежат зашифрованными и показываются один раз при сохранении. Они никогда не попадают в исходники, журналы, запросы к модели или выгрузку — только в процесс прогона в нужный момент. Их можно заменить или удалить, а ключ шифрования — сменить; смена ключа касается сразу всех проектов.

**Переменные** — это наборы значений. Действующим считается первое, остальные держат запасом и подставляют руками при ротации: например, когда у учётной записи меняется пароль. Действие при этом не меняется — имя переменной остаётся одним и тем же.

**Среды** — это разные стенды одного продукта, у каждого свой базовый адрес. В среде можно задать и собственные значения переменных: они перекроют проектные. А чтобы обход случайно не тронул живой сайт, есть список продакшн-хостов — их без явного разрешения продукт не задевает.

## Как действие находит элементы

Записывая нажатие, продукт запоминает, *как найти* этот элемент на странице. От этого зависит, переживёт ли действие следующую правку вёрстки. Порядок такой: сначала специальные метки разработчика, потом стабильные идентификаторы и подписи, и только в последнюю очередь — путь по структуре страницы. Последний вариант самый хрупкий: стоит поменять разметку, и шаг потеряется. Такие шаги помечаются, чтобы вы видели слабое место заранее.

## Прогон

Кнопка запуска выполняет действие на текущей вкладке. После прогона появляется новый экран с пометкой «через действие» и результаты проверок на той странице, куда действие пришло. Если сценарий уводит на другой сайт, продукт сначала спросит подтверждение: выходить за пределы проверяемого сайта разрешено не всегда. Адрес страницы действие берёт из среды прогона — `ctx.vars.BASE_URL`, поэтому одно и то же действие работает и на тестовом стенде, и на рабочем: меняется среда, а не сценарий.

## Действия словами

Описать сценарий можно текстом: «войти и открыть раздел оплаты». Агент напишет действие сам — с учётом накопленных знаний о том, как устроен ваш интерфейс. Готовое действие появляется **неподтверждённым**: его нужно прогнать и посмотреть, что получилось. Если всё верно — подтверждаете, если нет — удаляете или просите поправить. В тестах участвуют только подтверждённые действия, поэтому черновик никогда не сломает готовую проверку.

## Подготовка и очистка

Часть пути повторяется в каждом тесте: войти, принять согласия, привести стенд в нужное состояние. Чтобы не описывать это заново, у проекта есть два списка действий — **Подготовка** и **Очистка**. Первый выполняется до шагов любого теста, второй — после.

Тест может объявить свои списки: тогда они полностью заменяют проектные — ничего не подмешивается. Пустой список тоже ответ: он выключает фазу целиком. Очистка выполняется даже тогда, когда шаг упал с ошибкой: возвращать стенд в порядок нужно именно на таких прогонах.

## Честные ограничения

- **Шаги идут по одной строке** — без циклов, условий и повторяющихся блоков. Так сделано нарочно: переход между страницами разрушает всё, что выполнялось до него, и только простая последовательность переживает этот момент надёжно.
- **На переходе между сайтами фрагмент может повториться** — если шаг увёл на другой домен, часть сценария иногда выполняется дважды. Внутри одного сайта такого не бывает.
- **Общий бюджет времени** — около минуты на всё действие. Долгие сценарии лучше разбивать: короче действие — понятнее ошибка, когда что-то сломается.
- **Учётные данные не найдены — это честная ошибка прогона** — если значения нет или его заменили, действие не выполнится, и прогон честно упадёт. Поэтому действие лучше сначала прогнать на тестовом стенде.

Дальше: как собрать из действий и правил тест — в разделе [Тесты](/agents/test/docs/tests)
.

[← Оглавление документации](/agents/test/docs)
