При разработке автоматизированных сценариев тестирования в системе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда при проведении документа или выполнении иного действия в клиенте тестирования возникает ошибка, но метод ТестируемоеПриложение.ПолучитьТекущуюИнформациюОбОшибке() в менеджере тестирования возвращает Неопределено. Разберемся, почему так происходит и какими способами можно получить описание возникшей проблемы для привязки ее к шагу теста.
Проанализируем причины такого поведения платформы. Метод ТестируемоеПриложение.ПолучитьТекущуюИнформациюОбОшибке() предназначен для перехвата объекта ИнформацияОбОшибке только в случае возникновения необработанных критических исключений времени выполнения. К ним относятся системные сбои кода, фатальные ошибки платформы или деление на ноль, которые приводят к аварийному прерыванию выполнения процедуры.
В типичных конфигурациях 1С ошибки проведения реализуются иначе. Разработчики используют прикладную проверку: устанавливают флаг Отказ = Истина в обработчике ПередЗаписью или ОбработкаПроведения и выводят текст через объект СообщениеПользователю. С точки зрения платформы это является штатным сценарием логики приложения, а не системным сбоем. Следовательно, контекст критической ошибки не создается, и вышеупомянутый метод возвращает пустое значение.
Рассмотрим наиболее надежный способ получения информации об ошибках логики — чтение массива сообщений, выведенных в активном окне клиента тестирования. Для этого у объекта окна предусмотрен специальный метод. Разберем пример кода для менеджера тестирования:
// Получаем активное окно в тестируемом приложении
Окно = ТестируемоеПриложение.ПолучитьАктивноеОкно();
// Извлекаем все сообщения, которые были выведены пользователю в этом окне
МассивСообщений = Окно.ПолучитьТекстыСообщенийПользователю();
Если МассивСообщений.Количество() > 0 Тогда
Для Каждого ТекстСообщения Из МассивСообщений Цикл
// Обрабатываем текст ошибки, привязываем к логу тестирования
Сообщить("Обнаружена ошибка: " + ТекстСообщения);
КонецЦикла;
КонецЕсли;
Важный нюанс: метод ПолучитьТекстыСообщенийПользователю() необходимо вызывать именно у того объекта ТестируемоеОкноКлиентскогоПриложения, в котором возникла ошибка. Если вызвать его у главного окна в тот момент, когда открыта форма документа с ошибкой, список сообщений может оказаться пустым.
Иногда ошибка приводит к открытию отдельного диалогового окна (предупреждения). В этом случае алгоритм действий меняется. Проанализируем ситуацию по шагам:
ТекущаяМодифицированность() у тестируемой формы. Если после попытки проведения форма остается модифицированной, значит, запись не удалась.Если менеджер тестирования и клиент тестирования запущены в рамках одной информационной базы, мы можем применить «серверный» подход. После выполнения команды проведения в клиенте, в коде менеджера тестирования можно напрямую обратиться к базе данных.
// Пример проверки состояния документа по ссылке
Функция ДокументПроведен(СсылкаНаДокумент) Экспорт
Возврат СсылкаНаДокумент.Проведен;
КонецФункции
Если функция возвращает Ложь, значит, проведение не состоялось. После этого можно программно проанализировать Журнал регистрации, отобрав последние записи с типом «Ошибка» для данного сеанса клиента тестирования. Это позволит получить технические подробности сбоя, даже если они не были выведены в интерфейс пользователя.
Для создания отказоустойчивых тестов мы рекомендуем комбинировать описанные подходы. В общем виде алгоритм контроля шага тестирования может выглядеть так:
Нажать() на кнопку проведения).ПолучитьТекстыСообщенийПользователю().ТестируемоеПриложение.ПолучитьАктивноеОкно().Такой комплексный подход позволит вам гарантированно фиксировать причины неудачного завершения тестов и формировать подробные отчеты об ошибках в автоматическом режиме.