Проверить границы поиска и доступность меню собственной надписи

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

У собственного визуального листового элемента нет вложенного учебного поля; диагностика явно различает отсутствие, исключение и доступность панели/меню.

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

Полный модуль формы менеджера /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);
        Надпись = Форма.ПолучитьОбъект(Тип("ТестируемаяДекорацияФормы"), , "УчебнаяНадпись", 10);
        Сообщить(Надпись.НайтиОбъект(Тип("ТестируемоеПолеФормы"), , "НеСуществуетGuideOwnedПоле", 1) = Неопределено);
        Сообщить(Надпись.НайтиОбъекты(Тип("ТестируемоеПолеФормы"), , "НеСуществуетGuideOwnedПоле", 1).Количество() = 0);
        ПолучениеОтсутствующегоДалоОшибку = Ложь;
        Попытка
            Надпись.ПолучитьОбъект(Тип("ТестируемоеПолеФормы"), , "НеСуществуетGuideOwnedПоле", 1);
        Исключение
            ПолучениеОтсутствующегоДалоОшибку = Истина;
            Сообщить("Диагностика обязательного поиска внутри своей надписи: " + ОписаниеОшибки());
        КонецПопытки;
        Сообщить(ПолучениеОтсутствующегоДалоОшибку);
        Попытка
            ПанельНадписи = Надпись.ПолучитьКоманднуюПанель();
            Сообщить("Тип результата панели своей надписи: " + Строка(ТипЗнч(ПанельНадписи)));
        Исключение
            Сообщить("Командная панель этой надписи недоступна: " + ОписаниеОшибки());
        КонецПопытки;
        Попытка
            МенюНадписи = Надпись.ПолучитьКонтекстноеМеню();
            Сообщить("Тип результата контекстного меню своей надписи: " + Строка(ТипЗнч(МенюНадписи)));
        Исключение
            Сообщить("Контекстное меню этой надписи недоступно: " + ОписаниеОшибки());
        КонецПопытки;
    Исключение
        ОшибкаТеста = ОписаниеОшибки();
    КонецПопытки;
    ОшибкиЗавершения = ЗавершитьСобственныйУчебныйТест(Приложение, ИсходныйЛимит);
    Если Не ПустаяСтрока(ОшибкаТеста) Или Не ПустаяСтрока(ОшибкиЗавершения) Тогда
        ВызватьИсключение "Ошибка учебного UI-теста: " + ОшибкаТеста + " " + ОшибкиЗавершения;
    КонецЕсли;
    Сообщить("Сценарий завершён без исключения. Отдельно сверяйте контрольные Истина и видимые данные учебного клиента");
КонецПроцедуры

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

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

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

  2. Поиск начинается внутри точно найденной собственной надписи, не во всём приложении. Заведомо отсутствующее имя принадлежит только учебному сценарию.

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

  4. Наличие метода в общем тестируемом интерфейсе не означает, что каждая конкретная декорация имеет командную панель или контекстное меню.

  5. Два последних обращения диагностические: выводится тип результата либо полный текст ошибки для своего пустого fixture. Исключение не скрывается и не считается зелёной проверкой наличия панели.

  6. Полученное меню или панель не нажимаются. Если контекстное меню отображено в клиенте, закройте его вручную, не выбирая неизвестный пункт.

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

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

  1. Три обязательные логические проверки ожидаются Истина: одиночное отсутствие, пустой набор и ошибка обязательного поиска.

  2. Для панели/меню записан фактический тип или причина недоступности. Их существование не обещано и не входит в обязательный положительный результат этого leaf-элемента.

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

На настоящей собственной надписи показаны стратегии отрицательного поиска и честная диагностика контекстных возможностей.

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

  1. Исключение получения панели не доказывает ошибку данных формы; возможность зависит от конкретного элемента и клиента.

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

  3. Не переносить обработку ошибок из пустого fixture на форму с данными пользователей и не публиковать её технические ошибки.

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

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

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

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

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