Автоматизированное тестирование в среде 1С:Предприятие часто сталкивается с трудностями при взаимодействии с динамическими элементами интерфейса, такими как выпадающие списки и формы выбора. Стандартный механизм записи действий пользователя не всегда корректно воспроизводит сложные сценарии, где требуется дождаться отрисовки окна или подбора данных. Рассмотрим подробнее, как решить проблему открытия формы выбора и какие подходы к тестированию считаются наиболее эффективными в современной разработке на платформе 1С.
Проанализируем ситуацию, описанную в вопросе. Автор пытается имитировать ввод текста и ожидать формирования списка. Основная причина неудачи часто кроется в асинхронности работы управляемого интерфейса. Когда мы используем ТестируемоеПриложение, система посылает команды клиентскому приложению, но не всегда гарантирует, что визуальный компонент (форма выбора или выпадающий список) успел инициализироваться в памяти и отобразиться на экране.
В приведенном примере кода используются методы ВвестиТекст и ОжидатьФормированияВыпадающегоСписка. Если после этого форма не открывается, это может означать, что фокус с поля ушел раньше времени или метод ВыполнитьВыборИзВыпадающегоСписка не находит нужный элемент, так как список пуст или еще не сформирован запросом к серверу.
Для того чтобы гарантированно открыть форму выбора справочника (например, "Сотрудники"), вместо простого ввода текста рекомендуется использовать метод ВыполнитьВыбор(). Рассмотрим пример правильной последовательности действий для работы с полем формы:
// Находим окно и форму
ОкноПриема = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"), "Прием на работу (создание)");
ФормаДокумента = ОкноПриема.НайтиОбъект(Тип("ТестируемаяФорма"), "Прием на работу (создание)");
// Находим поле "Сотрудник"
ПолеСотрудник = ФормаДокумента.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Сотрудник");
// Активизируем поле, чтобы имитировать фокус пользователя
ПолеСотрудник.Активизировать();
// Выполняем команду выбора (нажатие на кнопку с тремя точками)
ПолеСотрудник.ВыполнитьВыбор();
// Теперь нужно дождаться появления нового окна — формы выбора справочника
ОкноВыбора = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"), "Выберите сотрудника", , 10);
ФормаВыбора = ОкноВыбора.НайтиОбъект(Тип("ТестируемаяФорма"), "ФормаВыбора");
// В форме выбора находим список и выбираем нужный элемент
Список = ФормаВыбора.НайтиОбъект(Тип("ТестируемаяТаблицаФормы"), "Список");
Список.ВыбратьСтроку();
Важный момент: при работе с управляемыми формами всегда указывайте таймаут в методе НайтиОбъект. Это позволяет тесту дождаться завершения серверного вызова и отрисовки интерфейса.
Как отмечают опытные разработчики, UI-тесты (тестирование через интерфейс) часто бывают "хрупкими". Любое изменение дизайна формы может сломать тест. Рассмотрим более надежный, программный метод тестирования. Суть его заключается в заполнении реквизитов объекта напрямую в форме и принудительном вызове обработчиков событий ПриИзменении.
Для этого в конфигурацию (или через расширение) добавляется экспортный метод, который позволяет тесту "дергать" логику формы. Разберем по шагам, как это реализовать:
СотрудникПриИзменении экспортной или создаем вспомогательную экспортную процедуру.Пример программного заполнения в тесте:
// В контексте теста получаем форму
Форма = ОткрытьФорму("Документ.ПриемНаРаботу.Форма.ФормаДокумента");
// Программное заполнение реквизита
Форма.Объект.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович");
// Вызов логики, которая должна отработать при выборе сотрудника
// (например, заполнение подразделения или оклада)
ЭлементСотрудник = Форма.Элементы.Сотрудник;
Форма.СотрудникПриИзменении(ЭлементСотрудник);
// Проверяем результат
Если Форма.Объект.Подразделение.Пустая() Тогда
ВызватьИсключение "Автозаполнение подразделения не сработало!";
КонецЕсли;
Этот подход значительно ускоряет выполнение тестов, так как исключает медленные визуальные операции отрисовки окон и поиска элементов по заголовкам.
Если вы планируете заниматься автоматизацией всерьез, проанализируем возможности фреймворка Vanessa Automation. Это мощный инструмент на базе языка Gherkin, который надстроен над штатным механизмом 1С и решает большинство проблем с ожиданиями.
В Vanessa Automation сценарий выбора сотрудника будет выглядеть как простой текст:
И Я выбираю "Иванов Иван Иванович" в поле "Сотрудник"
Система сама под капотом выполнит следующие действия:
Сотрудник.Преимущества Vanessa: Умные ожидания (Smart Waits): Тест не упадет, если сервер "задумался" на лишнюю секунду. Скриншоты и видео: В случае ошибки вы получите полный отчет с картинкой того, что пошло не так. Документация: Сценарии пишутся на русском языке, что позволяет бизнес-аналитикам проверять логику тестов.
Выясним причины, по которым тесты могут выдавать "косяки", как упоминалось в сообщениях форума:
Использование связки из Vanessa Automation для высокоуровневых сценариев и xUnitFor1C (или Vanessa-ADD) для низкоуровневых Unit-тестов позволяет создать надежную систему контроля качества кода, которая не будет "сыпаться" при каждом обновлении платформы.