Загрузка данных
Перед началом вызови skill `using-agent-skills` и выбери подходящие навыки для работы с живым интерфейсом Playwright/CDP.
Продолжай работу только в:
zadanie3/.gigacode/skills/snl-meta-integration-interaction
Текущую навигацию НЕ переписывать. Она уже подтверждена живым прогоном:
META_HOME
→ верхняя кнопка «Создать»
→ пункт «Интеграционное взаимодействие»
→ модалка «Создание нового ИВ»
→ поле «Выбор АС»
Не возвращаться к meta-card, реестру ИВ и фильтру «Имя АС».
Текущая проблема
Поле «Выбор АС» внутри модалки найдено, но селектор АС не открылся и значение SberGeo не было выбрано.
В отчёте:
- CREATE_IV_MODAL_FOUND=true
- AS_FIELD_FOUND_IN_MODAL=true
- as_selector_open.png не создан
- AC selection failed
Нужно исправить только взаимодействие с полем «Выбор АС» и провести живой тест.
1. Исследовать реальный DOM поля «Выбор АС»
После открытия модалки:
- найти контейнер поля по видимому label «Выбор АС»;
- сохранить HTML только контейнера поля;
- собрать все вложенные:
- input;
- button;
- svg;
- span;
- элементы с onclick;
- элементы с tabindex;
- элементы с role;
- элементы с aria-*;
- определить фактический кликабельный элемент;
- не предполагать заранее, что это Ant Design или Material UI;
- не использовать координаты, пока не исследован DOM.
Создать:
artifacts/discovery/as_field_container.html
artifacts/discovery/as_field_elements.json
artifacts/discovery/as_field_before_click.png
В JSON для каждого потенциального элемента сохранить:
- tag;
- text;
- class;
- role;
- type;
- tabindex;
- aria-label;
- aria-haspopup;
- bounding box;
- visible;
- enabled.
2. Открыть селектор АС
Попробовать безопасно и по очереди:
1. клик по кнопке/стрелке внутри FormControl;
2. клик по input;
3. клик по внешнему контейнеру поля;
4. focus input + ArrowDown;
5. Space или Enter только после focus.
После каждой попытки проверять появление нового popover/dialog/grid/listbox.
Не выполнять несколько кликов подряд без проверки результата.
Считать селектор открытым только если появился новый видимый контейнер, содержащий:
- строки вариантов;
- таблицу/grid;
- поле поиска;
- список;
- либо текст объектов АС.
После открытия сохранить:
artifacts/discovery/as_selector_open.png
artifacts/discovery/as_selector_dom.html
artifacts/discovery/as_selector_elements.json
3. Учитывать серверную загрузку
Судя по предыдущему анализу, селектор может использовать grid с ленивой серверной загрузкой.
После открытия:
- дождаться не менее 2 секунд;
- проверить loading/spinner;
- проверить появление строк;
- выполнить ограниченный retry, например 5 попыток с интервалом 1–2 секунды;
- проверить, требуется ли ввод текста для запуска поиска;
- если есть поле поиска — ввести значение из `target.as_name`;
- после ввода дождаться обновления таблицы;
- не считать 0 строк окончательным сразу после открытия.
Не использовать META API и сетевые запросы напрямую. Только UI через Playwright CDP.
4. Значение для теста
Использовать значение из YAML:
target:
as_name: "SberGeo"
Не хардкодить SberGeo в основной логике.
`select_as(page, as_name)` или эквивалентная функция должна принимать любое имя АС.
5. Поиск варианта
После загрузки вариантов собрать видимые строки.
Искать в таком порядке:
1. точное совпадение с `SberGeo`;
2. точное нормализованное совпадение;
3. отображаемое имя, содержащее SberGeo, например:
`Геоинформационная система SberGeo`;
4. единственное частичное совпадение.
Если найдено несколько частичных совпадений:
AMBIGUOUS_AS_MATCH
Если ничего не найдено после реальной загрузки:
AS_NOT_FOUND
При ошибке обязательно сохранить доступные строки в:
artifacts/discovery/as_selector_rows.json
Не выбирать первую строку автоматически и не использовать индекс.
6. Выбор строки
Выбрать найденный вариант кликом именно по строке или её доступной ячейке.
После клика проверить:
- popover закрылся или изменился;
- в поле «Выбор АС» отображается выбранное значение;
- значение не осталось пустым;
- исчезло сообщение «Поле обязательно для заполнения»;
- появилась полная форма.
Сохранить:
artifacts/discovery/as_selected.png
artifacts/discovery/as_selection_result.json
Ожидаемый отчёт:
AS_SELECTOR_OPENED=true
AS_OPTIONS_LOADED=true
AS_REQUESTED_VALUE=SberGeo
AS_MATCHED_DISPLAY_VALUE=<реальное название>
AS_SELECTED=true
AS_SELECTION_CONFIRMED=true
7. Проверка раскрытия полной формы
После успешного выбора АС дождаться появления секций:
1. Контекст.
2. Общие данные.
3. Потребитель.
4. Поставщик.
5. Информационная безопасность.
6. Нефункциональные требования.
7. Специальные атрибуты.
Собрать их реальные названия и поля.
Ожидаемый результат:
FULL_FORM_EXPANDED=true
SECTIONS_FOUND=7
Обновить:
artifacts/discovery/iv_form_after_ac.json
artifacts/discovery/iv_form_fields.json
artifacts/discovery/iv_form_report.md
docs/INTERFACE_REQUIRED.md
8. ФП/модуль/подмодуль пока не выбирать
В этом запуске основная цель — доказать открытие селектора АС, выбор SberGeo и раскрытие полной формы.
Выбор:
target.fp_module_submodule_name
выполнять только после успешного подтверждения выбора АС. Если выбор АС не завершён — не переходить к ФП/модулю/подмодулю.
9. Безопасность
- нижнюю кнопку «Создать» не нажимать;
- не сохранять ИВ;
- не использовать META API;
- не использовать requests/httpx;
- не сохранять cookies, токены и пароли;
- не закрывать пользовательский браузер;
- корректно отсоединиться от CDP.
Дополнительно проверь фактическую реализацию завершения соединения. В отчёте написано `browser.close() — disconnected from CDP`. Нужно доказать, что это действительно только отключает Playwright-соединение и не может закрыть пользовательский браузер. Предпочтительно использовать явно безопасный механизм отсоединения, уже применённый во втором задании.
10. Тесты
Добавить offline-тесты на:
- открытие через кнопку-стрелку;
- открытие кликом по input;
- открытие через ArrowDown;
- ожидание ленивой загрузки;
- точное совпадение;
- отображаемое имя «Геоинформационная система SberGeo»;
- несколько частичных совпадений;
- отсутствие вариантов;
- запрет выбора первой строки;
- подтверждение значения в поле;
- запрет нижней кнопки «Создать».
После изменений выполнить:
python3 -m py_compile scripts/*.py
и полный набор offline-тестов.
11. Финальный отчёт
Отдельно показать:
- какой конкретно DOM-элемент оказался кликабельным;
- каким действием реально открылся селектор;
- был ли поиск по тексту необходим;
- сколько строк загрузилось;
- какой текст строки был выбран;
- какое значение появилось в поле;
- появились ли все 7 секций;
- список созданных артефактов с размерами;
- результаты py_compile;
- результаты offline-тестов;
- подтверждение, что нижняя кнопка «Создать» не нажималась;
- подтверждение, что браузер пользователя остался открыт.
Не объявлять этап завершённым, пока нет одновременно:
AS_SELECTOR_OPENED=true
AS_OPTIONS_LOADED=true
AS_SELECTED=true
AS_SELECTION_CONFIRMED=true
FULL_FORM_EXPANDED=true
SECTIONS_FOUND=7