Загрузка данных


Перед началом вызови 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