Прочитать паспорт собственной формы и найти её элементы

Учебные задачи

Проверяем название, поиск, непосредственных детей, панель и кнопку по умолчанию, не нажимая её.

Где и как запускать

Полный модуль формы менеджера /TESTMANAGER; fixture открыт отдельно в /TESTCLIENT.

Подготовка

  1. Только собственная пустая конфигурация УчебнаяКонфигурацияСинтаксиса. Для первого урока создайте новую внешнюю обработку УчебныйИнтерфейсТестирования с пустой основной управляемой формой Форма.

  2. Запустите два отдельных тонких клиента собственной учебной базы: тестируемый с /TESTCLIENT -TPort15380, менеджер с /TESTMANAGER. Порт 15380 — собственный учебный; убедитесь, что на нём не работает другой клиент. Не подключайте менеджер к рабочей базе/чужому приложению.

  3. В fixture назначьте событие ПриСозданииНаСервере одноимённому обработчику и вставьте весь модуль первого урока. Элементы и реквизиты вручную не создавайте. Откройте эту обработку в /TESTCLIENT.

  4. Каждый следующий урок — полный отдельный модуль формы другой обработки менеджера /TESTMANAGER с командой ВыполнитьПример. Перед каждым тестом заново откройте fixture; не выполняйте тест на изменённом состоянии предыдущего урока.

  5. Исходно первое поле Книга, второе Ручка, статус Готово, выбор book/Книга. Любые кнопки/ссылки действуют только на этой памяти формы; нет записи базы и внешних URL.

  6. Это код штатного механизма тестирования 1С, не браузерная проверка HTML. В данном окружении выполнение UI-тестов в настоящей 1С не подтверждено.

&НаКлиенте
Процедура ВыполнитьПример(Команда)
    Приложение = Новый ТестируемоеПриложение("127.0.0.1", 15380);
    Приложение.УстановитьСоединение();
    ИсходныйЛимит = Неопределено;
    ОшибкаТеста = "";
    Попытка
        Форма = Приложение.ПолучитьОбъект(Тип("ТестируемаяФорма"), "Учебная форма guide-owned-form-2026", , 10);
        ИсходныйЛимит = Приложение.ПолучитьМаксимальноеВремяВыполненияДействия();
        Приложение.УстановитьМаксимальноеВремяВыполненияДействия(10);
        Форма.Активизировать();
        Сообщить(Форма.ТекстЗаголовка = "Учебная форма guide-owned-form-2026");
        Сообщить(Не ПустаяСтрока(Форма.ИмяФормы));
        Сообщить(Форма.ТекущаяДоступность());
        Сообщить(Не Форма.ТекущаяМодифицированность());
        Сообщить(Не Форма.ТекущееТолькоПросмотр());
        ПервоеПоле = Форма.ПолучитьОбъект(Тип("ТестируемоеПолеФормы"), , "ПолеПервое", 10);
        Сообщить(ПервоеПоле.ПолучитьОтображаемыйТекст() = "Книга");
        Сообщить(Форма.НайтиОбъект(Тип("ТестируемоеПолеФормы"), , "НеСуществуетGuideOwnedПоле", 1) = Неопределено);
        Поля = Форма.НайтиОбъекты(Тип("ТестируемоеПолеФормы"), , "Поле*", 1);
        Сообщить(Поля.Количество() = 4);
        Дети = Форма.ПолучитьПодчиненныеОбъекты();
        Сообщить("Непосредственных объектов: " + Строка(Дети.Количество()));
        Сообщить(Форма.ПолучитьРодителя());
        Панель = Форма.ПолучитьКоманднуюПанель();
        Сообщить(ТипЗнч(Панель) = Тип("ТестируемаяГруппаФормы"));
        СобственнаяПанель = Форма.ПолучитьОбъект(Тип("ТестируемаяГруппаФормы"), , "УчебнаяПанель", 10);
        Сообщить(СобственнаяПанель.Имя = "УчебнаяПанель");
        КнопкаПоУмолчанию = Форма.НайтиКнопкуПоУмолчанию();
        Если КнопкаПоУмолчанию = Неопределено Тогда
            ВызватьИсключение "В собственном fixture нет кнопки по умолчанию";
        КонецЕсли;
        Сообщить(КнопкаПоУмолчанию.Имя = "КнопкаУчебноеЗакрытие");
    Исключение
        ОшибкаТеста = ОписаниеОшибки();
    КонецПопытки;
    ОшибкиЗавершения = ЗавершитьСобственныйУчебныйТест(Приложение, ИсходныйЛимит);
    Если Не ПустаяСтрока(ОшибкаТеста) Или Не ПустаяСтрока(ОшибкиЗавершения) Тогда
        ВызватьИсключение "Ошибка учебного UI-теста: " + ОшибкаТеста + " " + ОшибкиЗавершения;
    КонецЕсли;
    Сообщить("Сценарий завершён без исключения. Отдельно сверяйте контрольные Истина и видимые данные учебного клиента");
КонецПроцедуры

&НаКлиенте
Функция ЗавершитьСобственныйУчебныйТест(Приложение, ИсходныйЛимит)
    ОшибкиЗавершения = "";
    Если ТипЗнч(ИсходныйЛимит) = Тип("Число") Тогда
        Попытка
            Приложение.УстановитьМаксимальноеВремяВыполненияДействия(ИсходныйЛимит);
        Исключение
            ОшибкиЗавершения = "Не восстановлен лимит действий: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    Попытка
        Приложение.РазорватьСоединение();
    Исключение
        ОшибкиЗавершения = ОшибкиЗавершения + " Не разорвано соединение: " + ОписаниеОшибки();
    КонецПопытки;
    Возврат ОшибкиЗавершения;
КонецФункции

Разбор по шагам

  1. Тест подключается только к своему 127.0.0.1:15380 и получает точную собственную форму с таймаутом 10 секунд.

  2. ИмяФормы — имя метаданных, ТекстЗаголовка — видимый заголовок. Не подменяем одно другим и не угадываем имя внешней обработки по подписи.

  3. ПолучитьОбъект используется для обязательного поля, НайтиОбъект для ожидаемого отсутствия, НайтиОбъекты для всех четырёх полей внутри уже выбранной собственной формы.

  4. Дети — непосредственные объекты, а не все потомки рекурсивно. Родитель выводится диагностически; состав иерархии не выдаётся за гарантированный тип окна.

  5. GetCommandBar формы возвращает её командную панель; она не объявляется той же произвольно добавленной группой УчебнаяПанель. Собственная группа отдельно находится по точному имени.

  6. Кнопка по умолчанию найдена и проверена по имени, но здесь не нажата.

  7. Доступность, ТолькоПросмотр и модифицированность — разные состояния; fixture открыт заново и исходно немодифицирован.

  8. Исходный лимит действий восстанавливается, соединение отдельно разрывается и при ошибке. Разрыв соединения не закрывает весь тестируемый клиент.

Как проверить результат

  1. Одиннадцать логических проверок ожидаются Истина; две отдельные диагностики описывают детей и родителя.

  2. Собственная форма осталась открыта, Книга и Ручка не изменились.

Ожидаемый результат

Показаны настоящий объект тестируемой формы, стратегии поиска и её собственная панель.

На что обратить внимание

  1. Наличие кнопки по умолчанию не разрешает нажимать её в чужой форме.

  2. Если поле редактировали вручную, исходное состояние восстановите переоткрытием fixture.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.