Расширение тестируемого поля формы для поля ввода.ВыполнитьВыборИзВыпадающегоСписка

Методы · ExecuteChoiceFromDropList

Выбирает значение из открытого выпадающего списка по его представлению в списке.

Синтаксис

ВыполнитьВыборИзВыпадающегоСписка(<Значение>)
Полное описание, параметры и ограничения

Расширение тестируемого поля формы для поля ввода.ВыполнитьВыборИзВыпадающегоСписка (Tested form field extension for an input field.ExecuteChoiceFromDropList)

Расширение тестируемого поля формы для поля ввода (Tested form field extension for an input field)

ВыполнитьВыборИзВыпадающегоСписка (ExecuteChoiceFromDropList)

Доступен, начиная с версии 8.3.6.

Синтаксис:
ВыполнитьВыборИзВыпадающегоСписка(<Значение>)
Параметры:

<Значение> (обязательный)
Тип: Строка, Число.
Представление выбираемого значения или номер значения (индекс строки, нумерация с 0).
Описание:

Выбирает значение из открытого выпадающего списка по его представлению в списке.

Доступность:

Тонкий клиент, толстый клиент.

Использование в версии:

Доступен, начиная с версии 8.3.6.

Методическая информация

Практические примеры

Дождаться своего выпадающего списка, выбрать реальную строку и закрыть его

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

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

Полный модуль своей формы МенеджерВвода85.Пульт: имя своей конфигурации возвращает отдельная серверная функция без контекста, UI выполняется в /TESTMANAGER, тонкий клиент 8.5.1.1343. Реальный собственный /TESTCLIENT этой же базы УчебныйВыборВвода85 на вручную проверенном 127.0.0.1:15383; ни один модуль не запускался.

Подготовка

  1. Используйте только свою новую конфигурацию УчебныйВыборВвода85, язык Русский, управление Такси, платформа 8.5.1.1343. Создайте свой справочник УчебныеКниги85 по урокам выбора: иерархия групп и элементов, код Строка 10 без автонумерации, реквизиты МеткаСтенда и Секция типа Строка 30.

  2. Только в своём стенде вручную подготовьте группу BOOKGROUP и элемент BOOK/Книга, МеткаСтенда = owned-input85, Секция = Книги. Тест не создаёт и не записывает даже собственную книгу: использует заранее подготовленную настоящую ссылку.

  3. Создайте общую управляемую форму УчебныйВводТест85. Вставьте полный дополнительный модуль ниже и назначьте ПриСозданииНаСервере. Это испытуемая форма, основной модуль урока в неё не вставляйте.

  4. Реквизиты испытуемой формы: МеткаСеанса, НазваниеКниги85, УчебныйВыпадающий85, УчебныйСписок85, ИтогВыбора85 и Карточка85 — Строка 100; УчебноеКоличество85, Открытий85, Созданий85 — Число 6.0; УчебнаяКнига85 — СправочникСсылка.УчебныеКниги85.

  5. На испытуемой форме создайте отдельные поля ввода УчебныйВыпадающий85, УчебныйСписок85, УчебноеКоличество85 и УчебнаяКнига85 с одноимёнными ПутьКДанным. Это не колонки таблицы. Покажите МеткаСеанса, ИтогВыбора85, Открытий85 и Созданий85 как отдельные поля только для просмотра с одноимёнными путями.

  6. Для числовых полей задайте Формат ЧГ=0;ЧДЦ=0, чтобы контрольные представления были 3, 4, 0, 1 без группировки и дробной части. Для редактируемых полей доступность/видимость включены, ТолькоПросмотр выключено.

  7. Добавьте обычную группу КарточкаКниги85 и внутри поле Карточка85 только для просмотра. События Открытие/Создание показывают эту реальную собственную область и её данные; они не открывают стандартную форму записи каталога.

  8. Создайте команду и кнопку СброситьСвойВвод85 с одноимённым действием, ИзменяетСохраняемыеДанные = Ложь. Другие события поля назначаются кодом fixture, вручную их не привязывайте.

  9. Создайте собственную общую команду без параметра ОткрытьУчебныйВвод85 с дополнительным модулем запуска ниже; покажите её в единственной учебной подсистеме. Она открывает только подготовленную ОбщаяФорма.УчебныйВводТест85.

  10. Создайте обработку МенеджерВвода85 с управляемой формой Пульт, реквизитами Согласие (Булево), МеткаСеанса (Строка 100), Итог (Строка неограниченной длины). Команда и кнопка ВыполнитьСвойТест85, действие ВыполнитьСвойТест85. Основной код урока — полный модуль этого менеджера; назначьте ПриОткрытии(Отказ).

  11. Покажите флажок согласия, редактируемую фактическую метку и многострочный Итог только для просмотра. Для каждого урока используйте отдельную копию менеджера; одноимённые процедуры не вставляйте дважды.

  12. Самостоятельно обновите только свой стенд. Если позже решите выполнить ручной UI-тест, запустите свои тонкие клиенты с /TESTCLIENT -TPort15383 и /TESTMANAGER. Свободный локальный порт 15383 должен принадлежать только этому собственному тестовому клиенту. Код клиентов не запускает и порт не меняет.

  13. В своём /TESTCLIENT откройте испытуемую форму, скопируйте её настоящий UUID в менеджер, подтвердите согласие. Метку не создавайте в менеджере вместо источника. Не запускайте опыт в production или против чужого тестового приложения.

  14. Эти модули здесь не выполнялись: runtimeVerifiedScenarios=0, никаких 1С, GUI, соединений и кликов не запускалось. Авторские проверки статические, фактический выбор и действия интерфейса ещё требуют отдельного разрешённого ручного теста.

  15. При будущем ручном тесте меняются только данные и элементы собственной формы в памяти. Сброс и разрыв соединения предпринимаются независимо даже при ошибке; документы, файлы и книга справочника не записываются и не удаляются.

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Согласие = Ложь;
    МеткаСеанса = "";
    Итог = "Подготовьте свой /TESTCLIENT и скопируйте реальный UUID формы";
КонецПроцедуры

&НаКлиенте
Функция СвоеПоле85(Форма, Имя)
    Поле = Форма.ПолучитьОбъект(Тип("ТестируемоеПолеФормы"), , Имя, 10);
    Если Поле.Имя <> Имя Или Поле.Вид <> ВидПоляФормы.ПолеВвода Тогда
        ВызватьИсключение "Нужно именно своё отдельное поле ввода";
    КонецЕсли;
    Если Не Поле.ТекущаяВидимость() Или Не Поле.ТекущаяДоступность() Или Поле.ТекущееТолькоПросмотр() Тогда
        ВызватьИсключение "Своё поле должно быть видно, доступно и редактируемо";
    КонецЕсли;
    Возврат Поле;
КонецФункции

&НаКлиенте
Функция СвоеПредставление85(Форма, Имя)
    Поле = Форма.ПолучитьОбъект(Тип("ТестируемоеПолеФормы"), , Имя, 10);
    Возврат Поле.ПолучитьПредставлениеДанных();
КонецФункции

&НаКлиенте
Процедура ВыполнитьСвойТест85(Команда)
    Если Не Согласие Тогда
        ВызватьИсключение "Нужны свой стенд и явное согласие на UI-опыт только в своей форме";
    КонецЕсли;
    UUIDМетки = Новый УникальныйИдентификатор(МеткаСеанса);
    Если Строка(UUIDМетки) <> МеткаСеанса Тогда
        ВызватьИсключение "Нужно точное фактическое значение UUID своей формы";
    КонецЕсли;
    Приложение = Новый ТестируемоеПриложение("127.0.0.1", 15383);
    Форма = Неопределено;
    Поле = Неопределено;
    ИсходныйЛимит = Неопределено;
    ОшибкаТеста = "";
    ОшибкиЗавершения = "";
    Итог = "Результат ещё не получен";
    Попытка
        Приложение.УстановитьСоединение();
        ИсходныйЛимит = Приложение.ПолучитьМаксимальноеВремяВыполненияДействия();
        Приложение.УстановитьМаксимальноеВремяВыполненияДействия(10);
        Заголовок = "Учебный ввод85 " + МеткаСеанса;
        Формы = Приложение.НайтиОбъекты(Тип("ТестируемаяФорма"), Заголовок, , 10);
        Если ТипЗнч(Формы) <> Тип("ФиксированныйМассив") Или Формы.Количество() <> 1 Тогда
            ВызватьИсключение "Нужна ровно одна настоящая собственная форма этого сеанса";
        КонецЕсли;
        Форма = Приложение.ПолучитьОбъект(Тип("ТестируемаяФорма"), Заголовок, , 10);
        Если СвоеПредставление85(Форма, "МеткаСеанса") <> МеткаСеанса Тогда
            ВызватьИсключение "Реальная метка источника не совпала";
        КонецЕсли;
        Если СвоеПредставление85(Форма, "УчебныйВыпадающий85") <> "Книга"
            Или СвоеПредставление85(Форма, "ИтогВыбора85") <> "Книга"
            Или СвоеПредставление85(Форма, "УчебноеКоличество85") <> "3"
            Или СвоеПредставление85(Форма, "Открытий85") <> "0"
            Или СвоеПредставление85(Форма, "Созданий85") <> "0" Тогда
            ВызватьИсключение "Сначала вручную сбросьте собственный опыт; чужие изменения не затираются";
        КонецЕсли;
        Поле = СвоеПоле85(Форма, "УчебныйВыпадающий85");
        Поле.ОткрытьВыпадающийСписок();
        Если Не Поле.ВыпадающийСписокОткрыт() Тогда
            ВызватьИсключение "Настоящий собственный выпадающий список не открылся";
        КонецЕсли;
        Если Не Поле.ОжидатьФормированияВыпадающегоСписка(5) Тогда
            ВызватьИсключение "Данные собственного списка не сформировались за разрешённый интервал";
        КонецЕсли;
        Представления = Поле.ПолучитьПредставлениеСпискаВыбора();
        Если ТипЗнч(Представления) <> Тип("ФиксированныйМассив") Или Представления.Количество() <> 2 Тогда
            ВызватьИсключение "Нужны реальные две строки собственного списка";
        КонецЕсли;
        ПервоеЗначение = "";
        ПервыйТекст = "";
        ВтороеЗначение = "";
        ВторойТекст = "";
        Если Не Представления[0].Свойство("ПредставлениеДанных", ПервоеЗначение)
            Или Не Представления[0].Свойство("ОтображаемыйТекст", ПервыйТекст)
            Или Не Представления[1].Свойство("ПредставлениеДанных", ВтороеЗначение)
            Или Не Представления[1].Свойство("ОтображаемыйТекст", ВторойТекст) Тогда
            ВызватьИсключение "Менеджер должен использовать Русский язык и реальную структуру соответствий";
        КонецЕсли;
        Если ПервоеЗначение <> "Книга" Или ПервыйТекст <> "Книга" Или ВтороеЗначение <> "Ручка" Или ВторойТекст <> "Ручка" Тогда
            ВызватьИсключение "Фактический список не соответствует двум собственным образцам";
        КонецЕсли;
        Поле.ВыполнитьВыборИзВыпадающегоСписка(1);
        Если Поле.ПолучитьПредставлениеДанных() <> "Ручка" Тогда
            ВызватьИсключение "Выбор фактической второй строки не подтвердился";
        КонецЕсли;
        Поле.ОткрытьВыпадающийСписок();
        Если Не Поле.ВыпадающийСписокОткрыт() Тогда
            ВызватьИсключение "Список не открылся для опыта явного закрытия";
        КонецЕсли;
        Поле.ЗакрытьВыпадающийСписок();
        Если Поле.ВыпадающийСписокОткрыт() Тогда
            ВызватьИсключение "Явное закрытие собственного списка не подтвердилось";
        КонецЕсли;
        Итог = "Реальные две строки проверены; выбрана Ручка; повторно открытый список закрыт";
    Исключение
        ОшибкаТеста = ОписаниеОшибки();
    КонецПопытки;
    Если Поле <> Неопределено Тогда
        Попытка
            Если Поле.ВыпадающийСписокОткрыт() Тогда
                Поле.ЗакрытьВыпадающийСписок();
            КонецЕсли;
        Исключение
            ОшибкиЗавершения = "Закрытие своего списка не подтверждено: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    Если Форма <> Неопределено Тогда
        Попытка
            Сброс = Форма.ПолучитьОбъект(Тип("ТестируемаяКнопкаФормы"), , "СброситьСвойВвод85", 10);
            Сброс.Нажать();
            Если СвоеПредставление85(Форма, "УчебныйВыпадающий85") <> "Книга"
                Или СвоеПредставление85(Форма, "ИтогВыбора85") <> "Книга"
                Или СвоеПредставление85(Форма, "УчебноеКоличество85") <> "3"
                Или СвоеПредставление85(Форма, "Открытий85") <> "0"
                Или СвоеПредставление85(Форма, "Созданий85") <> "0" Тогда
                ВызватьИсключение "Свои исходные данные не восстановлены";
            КонецЕсли;
        Исключение
            ОшибкиЗавершения = ОшибкиЗавершения + " Не выполнен собственный сброс: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    Если ТипЗнч(ИсходныйЛимит) = Тип("Число") Тогда
        Попытка
            Приложение.УстановитьМаксимальноеВремяВыполненияДействия(ИсходныйЛимит);
        Исключение
            ОшибкиЗавершения = ОшибкиЗавершения + " Не восстановлен лимит: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    Попытка
        Приложение.РазорватьСоединение();
    Исключение
        ОшибкиЗавершения = ОшибкиЗавершения + " Разрыв соединения не подтверждён: " + ОписаниеОшибки();
    КонецПопытки;
    Если ОшибкаТеста <> "" Или ОшибкиЗавершения <> "" Тогда
        Итог = "Опыт не завершён успешно: " + ОшибкаТеста + " " + ОшибкиЗавершения;
        ВызватьИсключение Итог;
    КонецЕсли;
    Итог = Итог + "; свои данные восстановлены, лимит восстановлен, соединение разорвано; клиент остаётся открытым";
КонецПроцедуры


УчебныйВводТест85

УчебныйВыборВвода85 → Общие формы → УчебныйВводТест85 → Модуль

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только собственный новый неразделённый стенд УчебныйВыборВвода85";
    КонецЕсли;
    УчебнаяКнига85 = Справочники.УчебныеКниги85.НайтиПоКоду("BOOK");
    Если Не ЗначениеЗаполнено(УчебнаяКнига85) Тогда
        ВызватьИсключение "Нужен свой заранее созданный BOOK";
    КонецЕсли;
    Если УчебнаяКнига85.ЭтоГруппа Или УчебнаяКнига85.МеткаСтенда <> "owned-input85" Тогда
        ВызватьИсключение "BOOK должен быть своим учебным элементом";
    КонецЕсли;
    НазваниеКниги85 = УчебнаяКнига85.Наименование;
    ЭтаФорма.АвтоЗаголовок = Ложь;
    МеткаСеанса = Строка(Новый УникальныйИдентификатор);
    ЭтаФорма.Заголовок = "Учебный ввод85 " + МеткаСеанса;
    УчебныйВыпадающий85 = "Книга";
    УчебныйСписок85 = "Книга";
    УчебноеКоличество85 = 3;
    ИтогВыбора85 = "Книга";
    Карточка85 = "Закрыта";
    Открытий85 = 0;
    Созданий85 = 0;
    Элементы.КарточкаКниги85.Видимость = Ложь;
    Поле = Элементы.УчебныйВыпадающий85;
    Поле.РежимВыбораИзСписка = Истина;
    Поле.СписокВыбора.Добавить("Книга", "Книга");
    Поле.СписокВыбора.Добавить("Ручка", "Ручка");
    Поле.КнопкаВыпадающегоСписка = Истина;
    Поле.КнопкаОчистки = Истина;
    Поле.АвтоОтображениеКнопкиОчистки = Ложь;
    Поле = Элементы.УчебныйСписок85;
    Поле.РежимВыбораИзСписка = Истина;
    Поле.СписокВыбора.Добавить("Книга", "Книга");
    Поле.СписокВыбора.Добавить("Ручка", "Ручка");
    Поле.КнопкаВыбора = Истина;
    Поле.КнопкаСпискаВыбора = Истина;
    Поле.КнопкаОчистки = Истина;
    Поле.АвтоОтображениеКнопкиОчистки = Ложь;
    Поле.УстановитьДействие("НачалоВыбора", "НачатьСвойВыбор85");
    Поле.УстановитьДействие("ПриИзменении", "СвойВыборИзменен85");
    Поле = Элементы.УчебноеКоличество85;
    Поле.КнопкаРегулирования = Истина;
    Поле.Формат = "ЧГ=0;ЧДЦ=0";
    Поле.УстановитьДействие("Регулирование", "ИзменитьСвоеКоличество85");
    Поле = Элементы.УчебнаяКнига85;
    Поле.КнопкаОткрытия = Истина;
    Поле.АвтоОтображениеКнопкиОткрытия = Ложь;
    Поле.КнопкаСоздания = Истина;
    Поле.КнопкаВыпадающегоСписка = Истина;
    Поле.УстановитьДействие("Открытие", "ПоказатьСвоюКарточку85");
    Поле.УстановитьДействие("Создание", "НачатьСвойЧерновик85");
КонецПроцедуры

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

&НаКлиенте
Процедура СвойВыборИзменен85(Элемент)
    ИтогВыбора85 = УчебныйСписок85;
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьСвоеКоличество85(Элемент, Направление, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Если Направление <> 1 И Направление <> -1 Тогда
        ВызватьИсключение "Неожиданное направление собственного регулирования";
    КонецЕсли;
    НовоеКоличество = УчебноеКоличество85 + Направление;
    Если НовоеКоличество >= 0 И НовоеКоличество <= 5 Тогда
        УчебноеКоличество85 = НовоеКоличество;
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьСвоюКарточку85(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Открытий85 = Открытий85 + 1;
    Карточка85 = "Просмотр: " + НазваниеКниги85;
    Элементы.КарточкаКниги85.Видимость = Истина;
КонецПроцедуры

&НаКлиенте
Процедура НачатьСвойЧерновик85(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Созданий85 = Созданий85 + 1;
    Карточка85 = "Новый учебный черновик без записи";
    Элементы.КарточкаКниги85.Видимость = Истина;
КонецПроцедуры

&НаКлиенте
Процедура СброситьСвойВвод85(Команда)
    УчебныйВыпадающий85 = "Книга";
    УчебныйСписок85 = "Книга";
    УчебноеКоличество85 = 3;
    ИтогВыбора85 = "Книга";
    Карточка85 = "Закрыта";
    Открытий85 = 0;
    Созданий85 = 0;
    Элементы.КарточкаКниги85.Видимость = Ложь;
КонецПроцедуры
ОткрытьУчебныйВвод85

УчебныйВыборВвода85 → Общие команды → ОткрытьУчебныйВвод85 → Модуль

Полный модуль собственной общей команды без параметра: серверная функция возвращает фактическое имя конфигурации, клиент проверяет строку и открывает только свою подготовленную форму.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОткрытьФорму("ОбщаяФорма.УчебныйВводТест85");
КонецПроцедуры

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

  1. Проверяется свой вид ПолеВвода, имя, доступность, видимость и редактируемость. Дополнительные методы нельзя применять к произвольному тестируемому полю.

  2. ОткрытьВыпадающийСписок выполняет настоящее UI-действие. ВыпадающийСписокОткрыт контролирует его результат, а не возвращает заранее записанный флаг.

  3. ОжидатьФормированияВыпадающегоСписка(5) возвращает Булево. При Ложь тест прекращает выбор, не принимает истёкший таймаут за готовность.

  4. ПолучитьПредставлениеСпискаВыбора возвращает фиксированный массив структур. До индексов проверены тип и количество, до сравнения — наличие русских имён полей.

  5. Индекс 1 означает вторую реальную строку: нумерация метода начинается с нуля. Строковый вариант выбирает по представлению; этот контроль использует проверенный индекс.

  6. После выбора фактическое представление поля должно стать Ручка. Затем список открывается повторно, явно закрывается и проверяется закрытое состояние.

  7. Завершение нажимает только собственный сброс, восстанавливает реальный исходный лимит и независимо разрывает соединение. Ошибка любой части сохраняется.

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

  1. На своём реально запущенном стенде подтверждаются две структуры Книга/Книга и Ручка/Ручка, выбор Ручка и закрытие списка.

  2. После завершения опять Книга и исходные собственные данные, лимит восстановлен, соединение разорвано. Здесь такой запуск не выполнялся.

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

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

Полный собственный UI-цикл использует настоящие данные списка и проверяет каждый переход; статическая проверка не подменяет фактический UI-тест.

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

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

  2. Имена полей структуры зависят от языка менеджера тестирования. Этот стенд явно Русский; английские имена сюда не подставляются незаметно.

  3. Индекс строки и строка-представление — разные допустимые аргументы. Не считайте число 1 первой строкой.

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

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

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

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

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