ТестируемаяКнопкаФормы.Активизировать

Методы · Activate

Активизирует оконный объект.

Синтаксис

Активизировать()

Доступность

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

Полное описание, параметры и ограничения

Активизирует оконный объект.

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

Проверить своё поле ввода и кнопку: реальные состояния, ввод текста, пометка и восстановление

Полный UI-тест отдельного поля строки и кнопки собственной командной панели. Контролируются реальная идентичность, вид, заголовок, родители, подсказка и видимость; после ввода свой обработчик переключает ТолькоПросмотр и пометку, затем собственные данные и режим восстанавливаются.

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

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

Подготовка

  1. Создайте с нуля отдельную пустую конфигурацию УчебныеПоляТестирования85 на платформе8.5.1.1343; Управляемое приложение, Такси. Без прикладных объектов, общих реквизитов-разделителей, расширений, подписок и чужих обработчиков. В рабочей базе тесты не запускайте.

  2. Общие формы → УчебныеПоля85, тип Управляемая. Вставьте полный дополнительный модуль fixture ниже и назначьте ПриСозданииНаСервере(Отказ, СтандартнаяОбработка). Не заменяйте реквизиты этой формы данными справочника или документа.

  3. Добавьте реквизиты МеткаСеанса типа Строка, УчебныйТекст85 типа Строка длиной100 и РежимПросмотра типа Булево. РежимПросмотра не показывайте пользователю; он меняется только собственным обработчиком кнопки.

  4. Добавьте группу ГруппаДанных85 обычного вертикального вида, заголовок Данные опыта. Внутри неё два отдельных поля ввода: МеткаСеанса только для просмотра и УчебныйТекст85 с заголовком Учебный текст, видимым заголовком и доступным редактированием. Это не колонки таблицы.

  5. Добавьте отдельную группу ПанельРежима85 вида Командная панель. Внутри неё кнопку РежимПросмотра85 вида КнопкаКоманднойПанели, заголовок Только просмотр, Пометка=Ложь. Не заменяйте её обычной кнопкой вне панели: свойство Пометка предназначено для командной панели.

  6. Создайте команду ПереключитьРежимПросмотра85 с одноимённым действием и свяжите с кнопкой РежимПросмотра85. Создайте команду СброситьСвойОпыт85 с одноимённым действием и кнопку именно СброситьСвойОпыт85. Обе команды ИзменяетСохраняемыеДанные=Ложь.

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

  8. Обработки → МенеджерПолей85 → управляемая форма Пульт. Добавьте Согласие типа Булево, МеткаСеанса типа Строка, Итог типа Строка неограниченной длины, команду и кнопку ВыполнитьСвойТест с одноимённым действием. Основной код урока — полный модуль именно менеджера.

  9. Назначьте менеджеру ПриОткрытии(Отказ). Покажите флажок согласия, поле ввода фактической метки и многострочный Итог только для просмотра. Никаких неизвестных входных объектов урок не требует.

  10. Нажмите F7 и обновите только стенд. runtimeVerifiedScenarios=0: здесь 1С, приложение, тестируемые окна и соединения не запускались. Статическая проверка не доказывает фактическое отображение элементов.

  11. Вручную запустите один тонкий клиент этой новой базы с /TESTCLIENT -TPort15382, другой с /TESTMANAGER. Администратор заранее выделяет этот собственный свободный локальный порт и убеждается, что его не занимает чужой клиент. Код ничего не запускает автоматически.

  12. В тестируемом клиенте откройте свою форму. Исходно видны Книга, выключенная пометка кнопки и разрешённое редактирование. Скопируйте реальную метку из поля в менеджер; не генерируйте UUID в менеджере вместо собственного источника.

  13. Установите согласие и выполните тест. На промежуточном шаге свой текст Учебная книга должен сохраниться при ТолькоПросмотр=Истина и пометке=Истина; повторное нажатие возвращает редактируемое состояние.

  14. В завершении отдельная собственная кнопка сбрасывает только данные этой формы к Книга и исходному режиму. При ошибке очистки нажмите СброситьСвойОпыт85 вручную именно в своей форме. Клиент и форма не закрываются, документы, регистры и файлы не записываются.

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

&НаКлиенте
Процедура ПроверитьСвойСтенд()
    Если Не Согласие Тогда
        ВызватьИсключение "Подтвердите UI-тест только собственной формы в памяти";
    КонецЕсли;
    UUIDМетки = Новый УникальныйИдентификатор(МеткаСеанса);
    Если Строка(UUIDМетки) <> МеткаСеанса Тогда
        ВызватьИсключение "Скопируйте фактический UUID из своей формы, не создавайте метку в менеджере";
    КонецЕсли;
КонецПроцедуры

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

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

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

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

УчебныеПоля85

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

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

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

&НаКлиенте
Процедура ПереключитьРежимПросмотра85(Команда)
    РежимПросмотра = Не РежимПросмотра;
    Элементы.УчебныйТекст85.ТолькоПросмотр = РежимПросмотра;
    Элементы.РежимПросмотра85.Пометка = РежимПросмотра;
КонецПроцедуры

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

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

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

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

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

  1. Пара объектов получается через настоящий ТестируемоеПриложение и одну конкретную форму с реальным UUID-заголовком. Поле метки отдельно подтверждает идентичность источника; отсутствующая или дублирующая форма вызывает отказ.

  2. Поле проверяется по внутреннему имени, действительному виду ПолеВвода и видимому заголовку. Видимость, доступность, видимость заголовка и ТолькоПросмотр — разные состояния, не один универсальный getter.

  3. Подсказка сравнивается с реальным значением, заданным собственным fixture. Представление данных должно быть Книга; это отображаемая строка, не универсальное преобразование числа или даты.

  4. Родители поля и кнопки получаются native-методами и сверяются с реально созданными ГруппаДанных85 и ПанельРежима85. Подчинённые возвращаются действительными фиксированными массивами; число не угадывается и пустая коллекция не подменяется объектами.

  5. Кнопка должна иметь вид КнопкаКоманднойПанели, точный заголовок, видимость и доступность. ТекущееПометка проверяет реальное визуальное состояние; readonly-свойства тестируемого объекта не заполняются вручную.

  6. Ввод выполняется в отдельном реальном поле, затем фактическая кнопка активизируется и забирает фокус. ПолучитьПредставлениеДанных подтверждает отображаемое значение перед нажатием; несуществующий метод ЗакончитьРедактирование у поля не выдумывается. Серверной записи текста в каталог товаров нет.

  7. Настоящее нажатие запускает только собственную команду. Она меняет РежимПросмотра, свойство исходного ПолеФормы.ТолькоПросмотр и пометку исходного КнопкаФормы; тестируемые объекты остаются readonly-представлениями.

  8. Проверяется пара переходов: пометка и запрет редактирования включены, затем выключены. Данные после включения не должны исчезнуть, а кнопка должна оставаться доступной для возврата.

  9. Очистка нажимает только свой сброс, повторно подтверждает Книга, ТолькоПросмотр=Ложь и пометку=Ложь, затем независимо восстанавливает реальный лимит и разрывает соединение. Ошибка любой части не скрывается.

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

  1. При иной конфигурации, версии, чужом порту, отсутствии /TESTMANAGER, неверной фактической метке или нескольких формах тест должен отказаться. Не изменяйте защиту ради работы в production.

  2. Исходное отдельное поле видно, доступно, имеет видимый заголовок Учебный текст и точную собственную подсказку. Кнопка находится внутри своей командной панели и имеет требуемый вид.

  3. После ввода представление равно Учебная книга. После первого нажатия пометка=Истина, ТолькоПросмотр=Истина, текст тот же; доступность кнопки сохраняется.

  4. После второго нажатия оба состояния Ложь. Если проверка даёт неправильное значение, код выбрасывает исключение, а не просто печатает Ложь и объявляет успех.

  5. После завершения снова Книга, режим редактируемый, пометка снята, действительный исходный лимит восстановлен и соединение разорвано. Форма остаётся открытой.

  6. В полях и кнопках не присваиваются свойства ТестируемоеПолеФормы/ТестируемаяКнопкаФормы. При ошибке собственный сброс и разрыв соединения всё равно предпринимаются независимо.

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

В разрешённом ручном UI-тесте введён свой учебный текст, дважды проверено согласованное переключение режима и пометки, реальные исходные данные восстановлены и соединение разорвано. Здесь выполнены только статические проверки.

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

  1. Тестируемое поле — абстракция; дополнительные методы зависят от фактического Вид. ВводТекста и окончание редактирования здесь применяются только после подтверждения ПолеВвода, не к календарю, картинке или диаграмме.

  2. Для колонки таблицы некоторые getters вызывают исключение вне режима редактирования. Этот fixture содержит отдельное поле, а не колонку, поэтому эти ограничения не обходятся неизвестным объектом.

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

  4. Пометка исходной кнопки управляет кнопкой командной панели, не любой обычной кнопкой. Для теста специально выбран корректный вид и реальная группа-панель.

  5. Readonly-представление тестируемого объекта не равнозначно неизменяемости самой формы: собственный обработчик меняет свои исходные элементы и данные, а менеджер только наблюдает их и выполняет подтверждённые UI-действия.

  6. Пустые подчинённые коллекции у простых элементов нормальны. Поиск дочерних объектов не выдумывается и не считается выполненным только от существования самих методов; он требует отдельного подходящего fixture.

  7. В установленной справке кнопка содержит две страницы Активизировать и две ТекстЗаголовка с одинаковой семантикой. Экспорт сохранил отдельные ключи с суффиксом; один настоящий вызов и реальное чтение применимы к обеим страницам, а не являются двумя разными действиями.

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

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

  10. Код не запускался, runtimeVerifiedScenarios=0. 1С, сеть тестирования, окна, рабочие базы, файлы, резервные копии и архивы не менялись.

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

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

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

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

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