Изменить учебное количество и отменить следующий ввод

Учебные задачи

В собственном поле Книги вводим 7, затем пробуем 99 и отменяем именно редактирование поля. В базе ничего не сохраняется.

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

Полный клиентский модуль формы обработки в менеджере тестов, запущенном с /TESTMANAGER. Это не модуль тестируемой таблицы.

Подготовка

  1. Создайте собственную пустую учебную конфигурацию УчебнаяКонфигурацияСинтаксиса. Первый урок содержит полный модуль отдельной внешней обработки УчебнаяТаблицаТестирования; её данные только в памяти.

  2. Запустите два отдельных тонких клиента собственной учебной базы: тестируемый с /TESTCLIENT -TPort15380, менеджер с /TESTMANAGER. Порт 15380 — собственный учебный; убедитесь, что на нём не работает другой клиент. Не подключайте менеджер к рабочей базе/чужому приложению.

  3. В тестируемом клиенте вручную откройте собственную обработку из первого урока. В менеджере создайте другую внешнюю обработку с командой ВыполнитьПример; полный код одного теста вставьте в её модуль формы.

  4. Перед каждым тестом закройте и заново откройте таблицу в тестируемом клиенте. Исходно в ней A-01/Книга/3, B-02/Ручка/1, C-00/Бумага/2, без ранее установленной сортировки и редактирования.

  5. Каждый тест ищет точный учебный заголовок и таблицу ТаблицаТоваров внутри этой формы. Не заменяйте селекторы на * или первый найденный элемент рабочего приложения.

  6. Это код штатного механизма тестирования 1С, не браузерная проверка HTML. В данном окружении выполнение UI-тестов в настоящей 1С не подтверждено.

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

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

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

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

  2. Проверяем код A-01 до изменения и получаем конкретное визуальное поле внутри собственной таблицы.

  3. Активизировать поле выбирает колонку, ИзменитьСтроку начинает редактирование текущей колонки, ВвестиТекст имитирует ввод пользователем.

  4. ВвестиТекст и ПолучитьТекстРедактирования относятся к расширению тестируемого поля ввода, не ко всем тестируемым полям и не к обычному ПолеФормы.

  5. ЗакончитьРедактированиеСтроки(Ложь) завершает ввод без отмены. Затем отдельный ввод 99 отменяется штатным ОтменитьРедактирование; ожидается прежнее 7.

  6. Это изменение памяти нашей формы. Оно не является транзакционным откатом базы и не гарантирует такую же логику у поля с прикладными обработчиками записи.

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

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

  1. Пять контрольных Истина; после отмены второго ввода количество Книги осталось 7.

  2. Закройте и заново откройте собственную обработку: количество снова 3, потому что данные восстанавливает fixture, а не запись в справочник.

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

Показан реальный тест ввода, подтверждения и отмены редактирования собственного поля.

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

  1. Отмена текущего редактирования не откатывает ранее подтверждённые изменения всего документа.

  2. Не запускайте ввод 7/99 на рабочем динамическом списке: там могут быть обработчики записи.

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

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

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

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

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