Как программно поймать и обработать ошибку в клиенте тестирования 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке автоматизированных сценариев тестирования в системе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда при проведении документа или выполнении иного действия в клиенте тестирования возникает ошибка, но метод ТестируемоеПриложение.ПолучитьТекущуюИнформациюОбОшибке() в менеджере тестирования возвращает Неопределено. Разберемся, почему так происходит и какими способами можно получить описание возникшей проблемы для привязки ее к шагу теста.

Почему штатный метод не видит ошибку проведения

Проанализируем причины такого поведения платформы. Метод ТестируемоеПриложение.ПолучитьТекущуюИнформациюОбОшибке() предназначен для перехвата объекта ИнформацияОбОшибке только в случае возникновения необработанных критических исключений времени выполнения. К ним относятся системные сбои кода, фатальные ошибки платформы или деление на ноль, которые приводят к аварийному прерыванию выполнения процедуры.

В типичных конфигурациях 1С ошибки проведения реализуются иначе. Разработчики используют прикладную проверку: устанавливают флаг Отказ = Истина в обработчике ПередЗаписью или ОбработкаПроведения и выводят текст через объект СообщениеПользователю. С точки зрения платформы это является штатным сценарием логики приложения, а не системным сбоем. Следовательно, контекст критической ошибки не создается, и вышеупомянутый метод возвращает пустое значение.

Способ 1: Получение текстов сообщений из окна формы

Рассмотрим наиболее надежный способ получения информации об ошибках логики — чтение массива сообщений, выведенных в активном окне клиента тестирования. Для этого у объекта окна предусмотрен специальный метод. Разберем пример кода для менеджера тестирования:


// Получаем активное окно в тестируемом приложении
Окно = ТестируемоеПриложение.ПолучитьАктивноеОкно();

// Извлекаем все сообщения, которые были выведены пользователю в этом окне
МассивСообщений = Окно.ПолучитьТекстыСообщенийПользователю();

Если МассивСообщений.Количество() > 0 Тогда
    Для Каждого ТекстСообщения Из МассивСообщений Цикл
        // Обрабатываем текст ошибки, привязываем к логу тестирования
        Сообщить("Обнаружена ошибка: " + ТекстСообщения);
    КонецЦикла;
КонецЕсли;

Важный нюанс: метод ПолучитьТекстыСообщенийПользователю() необходимо вызывать именно у того объекта ТестируемоеОкноКлиентскогоПриложения, в котором возникла ошибка. Если вызвать его у главного окна в тот момент, когда открыта форма документа с ошибкой, список сообщений может оказаться пустым.

Способ 2: Проверка состояния формы и модальных окон

Иногда ошибка приводит к открытию отдельного диалогового окна (предупреждения). В этом случае алгоритм действий меняется. Проанализируем ситуацию по шагам:

  1. Проверим свойство ТекущаяМодифицированность() у тестируемой формы. Если после попытки проведения форма остается модифицированной, значит, запись не удалась.
  2. Попытаемся найти активное модальное или блокирующее окно. Если такое окно найдено, мы можем считать текст из его элементов (надписей или текстовых полей).
  3. Проверим доступность кнопок. Если после нажатия кнопки «Провести и закрыть» форма не закрылась, это явный признак того, что возникла ошибка валидации данных.

Способ 3: Проверка данных на стороне Менеджера тестирования

Если менеджер тестирования и клиент тестирования запущены в рамках одной информационной базы, мы можем применить «серверный» подход. После выполнения команды проведения в клиенте, в коде менеджера тестирования можно напрямую обратиться к базе данных.


// Пример проверки состояния документа по ссылке
Функция ДокументПроведен(СсылкаНаДокумент) Экспорт
    Возврат СсылкаНаДокумент.Проведен;
КонецФункции

Если функция возвращает Ложь, значит, проведение не состоялось. После этого можно программно проанализировать Журнал регистрации, отобрав последние записи с типом «Ошибка» для данного сеанса клиента тестирования. Это позволит получить технические подробности сбоя, даже если они не были выведены в интерфейс пользователя.

Рекомендации по реализации контроля ошибок

Для создания отказоустойчивых тестов мы рекомендуем комбинировать описанные подходы. В общем виде алгоритм контроля шага тестирования может выглядеть так:

  1. Выполняем действие в клиенте (например, Нажать() на кнопку проведения).
  2. Проверяем, закрылась ли форма (если это предполагалось).
  3. Если форма активна, вызываем ПолучитьТекстыСообщенийПользователю().
  4. Если сообщений нет, но действие не выполнено, проверяем наличие активных предупреждающих окон через ТестируемоеПриложение.ПолучитьАктивноеОкно().
  5. В крайнем случае обращаемся к журналу регистрации для поиска записей по текущему номеру сеанса клиента тестирования.

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

← На главную