У собственной формы сначала отрицательное ожидание, затем точно проверенная кнопка закрытия и ограниченное ожидание.
Где и как запускать
Полный модуль формы менеджера /TESTMANAGER; fixture открыт отдельно в /TESTCLIENT.
Подготовка
Только собственная пустая конфигурация УчебнаяКонфигурацияСинтаксиса. Для первого урока создайте новую внешнюю обработку УчебныйИнтерфейсТестирования с пустой основной управляемой формой Форма.
Запустите два отдельных тонких клиента собственной учебной базы: тестируемый с /TESTCLIENT -TPort15380, менеджер с /TESTMANAGER. Порт 15380 — собственный учебный; убедитесь, что на нём не работает другой клиент. Не подключайте менеджер к рабочей базе/чужому приложению.
В fixture назначьте событие ПриСозданииНаСервере одноимённому обработчику и вставьте весь модуль первого урока. Элементы и реквизиты вручную не создавайте. Откройте эту обработку в /TESTCLIENT.
Каждый следующий урок — полный отдельный модуль формы другой обработки менеджера /TESTMANAGER с командой ВыполнитьПример. Перед каждым тестом заново откройте fixture; не выполняйте тест на изменённом состоянии предыдущего урока.
Исходно первое поле Книга, второе Ручка, статус Готово, выбор book/Книга. Любые кнопки/ссылки действуют только на этой памяти формы; нет записи базы и внешних URL.
Это код штатного механизма тестирования 1С, не браузерная проверка HTML. В данном окружении выполнение UI-тестов в настоящей 1С не подтверждено.
&НаКлиенте
Процедура ВыполнитьПример(Команда)
Приложение = Новый ТестируемоеПриложение("127.0.0.1", 15380);
Приложение.УстановитьСоединение();
ИсходныйЛимит = Неопределено;
ОшибкаТеста = "";
Попытка
Форма = Приложение.ПолучитьОбъект(Тип("ТестируемаяФорма"), "Учебная форма guide-owned-form-2026", , 10);
ИсходныйЛимит = Приложение.ПолучитьМаксимальноеВремяВыполненияДействия();
Приложение.УстановитьМаксимальноеВремяВыполненияДействия(10);
Сообщить(Не Форма.ОжидатьЗакрытие(1));
КнопкаЗакрытия = Форма.НайтиКнопкуПоУмолчанию();
Если КнопкаЗакрытия = Неопределено Тогда
ВызватьИсключение "В собственной форме нет кнопки по умолчанию";
КонецЕсли;
Если КнопкаЗакрытия.Имя <> "КнопкаУчебноеЗакрытие" Тогда
ВызватьИсключение "Найдена не собственная кнопка закрытия";
КонецЕсли;
КнопкаЗакрытия.Нажать();
Сообщить(Форма.ОжидатьЗакрытие(5));
Сообщить(Приложение.НайтиОбъект(Тип("ТестируемаяФорма"), "Учебная форма guide-owned-form-2026", , 1) = Неопределено);
Исключение
ОшибкаТеста = ОписаниеОшибки();
КонецПопытки;
ОшибкиЗавершения = ЗавершитьСобственныйУчебныйТест(Приложение, ИсходныйЛимит);
Если Не ПустаяСтрока(ОшибкаТеста) Или Не ПустаяСтрока(ОшибкиЗавершения) Тогда
ВызватьИсключение "Ошибка учебного UI-теста: " + ОшибкаТеста + " " + ОшибкиЗавершения;
КонецЕсли;
Сообщить("Сценарий завершён без исключения. Отдельно сверяйте контрольные Истина и видимые данные учебного клиента");
КонецПроцедуры
&НаКлиенте
Функция ЗавершитьСобственныйУчебныйТест(Приложение, ИсходныйЛимит)
ОшибкиЗавершения = "";
Если ТипЗнч(ИсходныйЛимит) = Тип("Число") Тогда
Попытка
Приложение.УстановитьМаксимальноеВремяВыполненияДействия(ИсходныйЛимит);
Исключение
ОшибкиЗавершения = "Не восстановлен лимит действий: " + ОписаниеОшибки();
КонецПопытки;
КонецЕсли;
Попытка
Приложение.РазорватьСоединение();
Исключение
ОшибкиЗавершения = ОшибкиЗавершения + " Не разорвано соединение: " + ОписаниеОшибки();
КонецПопытки;
Возврат ОшибкиЗавершения;
КонецФункцииРазбор по шагам
Тест подключается только к своему 127.0.0.1:15380 и получает точную собственную форму с таймаутом 10 секунд.
ОжидатьЗакрытие возвращает Булево. Первый вызов на открытой форме ограничен одной секундой и ожидается Ложь.
Кнопку по умолчанию проверяем по точному собственному имени до Нажать. Нельзя полагаться на то, что кнопка по умолчанию всегда отменяет запись.
Обработчик fixture обнуляет признак модифицированности собственной памяти и закрывает только форму. Рабочего документа в ней нет.
После пятисекундного ожидания повторный поиск собственного заголовка должен вернуть Неопределено; клиент приложения остаётся работать.
Исходный лимит действий восстанавливается, соединение отдельно разрывается и при ошибке. Разрыв соединения не закрывает весь тестируемый клиент.
Как проверить результат
Три проверки ожидаются Истина. Исчезла только собственная учебная форма.
Менеджер отдельно восстановил лимит и разорвал соединение. Этот тест выполняйте последним, затем fixture надо открыть заново.
Ожидаемый результат
Показано безопасное закрытие известной учебной формы с двумя ограниченными ожиданиями.
На что обратить внимание
Не закрывать основное окно приложения ради ожидания формы.
Не вызывать ОжидатьЗакрытие без таймаута: возможна ненужная долгая блокировка теста.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.