ТестируемаяТаблицаФормы

Типы · TestedFormTable

Представляет абстракцию элемента управления ТаблицаФормы.

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

ТестируемаяТаблицаФормы (TestedFormTable)

ТестируемаяТаблицаФормы (TestedFormTable)

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

Свойства:
ТекстЗаголовка (TitleText)
Имя (Name)

Методы:
Активизировать (Activate)
НайтиОбъект (FindObject)
НайтиОбъекты (FindObjects)
ПолучитьОбъект (GetObject)
ПолучитьПодчиненныеОбъекты (GetChildObjects)
ПолучитьРодителя (GetParent)
ПолучитьКоманднуюПанель (GetCommandBar)
ПолучитьКонтекстноеМеню (GetContextMenu)
ПолучитьТекстПодсказки (GetToolTipText)
ТекущаяВидимость (CurrentVisible)
ТекущаяДоступность (CurrentEnable)
ТекущееТолькоПросмотр (CurrentReadOnly)
ВозможноРазвернуть (CanBeExpanded)
Выбрать (Choose)
ВыделитьВсеСтроки (SelectAllRows)
ВыделитьСтроку (SelectRow)
ДобавитьСтроку (AddRow)
ЗакончитьРедактированиеСтроки (EndEditRow)
ИзменитьСтроку (ChangeRow)
ПерейтиКПервойСтроке (GotoFirstRow)
ПерейтиКПоследнейСтроке (GotoLastRow)
ПерейтиКПредыдущейСтроке (GotoPreviousRow)
ПерейтиКПредыдущемуЭлементу (GotoPreviousItem)
ПерейтиКСледующейСтроке (GotoNextRow)
ПерейтиКСледующемуЭлементу (GotoNextItem)
ПерейтиКСтроке (GotoRow)
ПерейтиНаУровеньВверх (GoOneLevelUp)
ПерейтиНаУровеньВниз (GoOneLevelDown)
ПереключитьПометкуУдаленияСтроки (SwitchRowDeleteMark)
ПолучитьВыделенныеСтроки (GetSelectedRows)
ПолучитьТекстЯчейки (GetCellText)
ПолучитьТекущийЭлемент (GetCurrentItem)
ПолучитьТекущуюСтроку (GetCurrentRow)
Развернут (Expanded)
Развернуть (Expand)
Свернуть (Collapse)
СкопироватьСтроку (CopyRow)
СнятьВыделениеВсехСтрок (DeselectAllRows)
СнятьВыделениеСтроки (DeselectRow)
ТекущийРежимРедактирование (CurrentModeIsEdit)
УдалитьСтроку (DeleteRow)
УстановитьПорядок (SetOrder)

Описание:

Представляет абстракцию элемента управления ТаблицаФормы.

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

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

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

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

Описание изменено в версии 8.3.8.

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

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

Записать журнал собственных UI-действий и разобрать XML

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

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

Полный клиентский модуль формы обработки в менеджере тестов, запущенном с /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);
        ЗаписьНачата = Ложь;
        ОшибкаЖурнала = "";
        ТекстЖурнала = "";
        Попытка
            Приложение.НачатьЗаписьЖурналаДействийПользователя();
            ЗаписьНачата = Истина;
            Таблица.Активизировать();
            Таблица.ПерейтиКПервойСтроке();
            Таблица.ПерейтиКСледующейСтроке();
            Приложение.ПриостановитьЗаписьЖурналаДействийПользователя();
            Таблица.ПерейтиКПоследнейСтроке();
            Приложение.ПродолжитьЗаписьЖурналаДействийПользователя();
            Таблица.ПерейтиКПервойСтроке();
            ТекстЖурнала = Приложение.ЗавершитьЗаписьЖурналаДействийПользователя();
            ЗаписьНачата = Ложь;
        Исключение
            ОшибкаЖурнала = ОписаниеОшибки();
        КонецПопытки;
        Если ЗаписьНачата Тогда
            Попытка
                Приложение.ПрерватьЗаписьЖурналаДействийПользователя();
            Исключение
                ВызватьИсключение "Запись не прервана: " + ОписаниеОшибки() + "; исходная ошибка: " + ОшибкаЖурнала;
            КонецПопытки;
        КонецЕсли;
        Если Не ПустаяСтрока(ОшибкаЖурнала) Тогда
            ВызватьИсключение ОшибкаЖурнала;
        КонецЕсли;
        Если ПустаяСтрока(ТекстЖурнала) Тогда
            ВызватьИсключение "Журнал собственных действий пуст";
        КонецЕсли;
        Чтение = Новый ЧтениеXML;
        Чтение.УстановитьСтроку(ТекстЖурнала);
        Узлов = 0;
        Попытка
            Пока Чтение.Прочитать() Цикл
                Узлов = Узлов + 1;
            КонецЦикла;
        Исключение
            Чтение.Закрыть();
            ВызватьИсключение;
        КонецПопытки;
        Чтение.Закрыть();
        Сообщить(Узлов > 0);
        Сообщить("Журнал прочитан как XML; весь текст не публикуется");
    Исключение
        ОшибкаТеста = ОписаниеОшибки();
    КонецПопытки;
    ОшибкиЗавершения = ЗавершитьСобственныйУчебныйТест(Приложение, ИсходныйЛимит);
    Если Не ПустаяСтрока(ОшибкаТеста) Или Не ПустаяСтрока(ОшибкиЗавершения) Тогда
        ВызватьИсключение "Ошибка учебного UI-теста: " + ОшибкаТеста + " " + ОшибкиЗавершения;
    КонецЕсли;
    Сообщить("Сценарий завершён без исключения. Отдельно сверяйте контрольные Истина и видимые данные учебного клиента");
КонецПроцедуры

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

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

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

  2. Тестируемое приложение должно быть изолированным, без чужой уже начатой записи действий. Здесь записываем только собственную таблицу памяти.

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

  4. Продолжить возобновляет запись, Завершить возвращает XML-строку. Прервать используется при ошибке, когда запись всё ещё начата.

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

  6. XML читается стандартным ЧтениеXML без предположений об именах узлов схемы. Количество XML-узлов не равно числу пользовательских действий.

  7. Не выводим весь журнал в сообщения: реальная запись действий может содержать имена, пути и введённые значения. Собственный fixture минимизирует данные, но не заменяет просмотр содержимого.

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

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

  1. Непустой журнал успешно читается как XML; контроль Узлов > 0 даёт Истина.

  2. Если нужно проверить паузу, изучите XML вручную только в своей базе и сверяйте записанные переходы, не угадывая теги. После успеха/обработанной ошибки запись не должна оставаться активной.

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

Показан полный жизненный цикл журнала с паузой, продолжением, завершением и аварийным прерыванием.

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

  1. Не путайте этот журнал с журналом регистрации информационной базы.

  2. Не публикуйте XML журнала рабочего приложения без проверки персональных и служебных данных.

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

Ожидать видимость и нужное значение без бесконечного цикла

Проверяем появление своей формы и состояние поля через экспортную функцию. Все ожидания имеют конечные таймауты.

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

Полный клиентский модуль формы обработки в менеджере тестов, запущенном с /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);
        Появилась = Приложение.ОжидатьОтображениеОбъекта(Тип("ТестируемаяФорма"), "Учебная таблица guide-owned-ui-2026", , 5);
        Сообщить(Появилась);
        Таблица.Активизировать();
        Таблица.ПерейтиКПервойСтроке();
        ПараметрыПроверки = Новый Структура("Форма,ИмяПоля,ОжидаемыйТекст", Форма, "ТоварыКоличество", "3");
        Условие = Новый ОписаниеОповещения("УчебноеПолеДостиглоСостояния", ЭтотОбъект, ПараметрыПроверки);
        Сообщить(Приложение.ОжидатьСостояния(Условие, 5));
        Сообщить(Не Приложение.ОжидатьОтображениеОбъекта(Тип("ТестируемаяФорма"), "НеСуществуетGuideOwnedUI2026", , 1));
    Исключение
        ОшибкаТеста = ОписаниеОшибки();
    КонецПопытки;
    ОшибкиЗавершения = ЗавершитьСобственныйУчебныйТест(Приложение, ИсходныйЛимит);
    Если Не ПустаяСтрока(ОшибкаТеста) Или Не ПустаяСтрока(ОшибкиЗавершения) Тогда
        ВызватьИсключение "Ошибка учебного UI-теста: " + ОшибкаТеста + " " + ОшибкиЗавершения;
    КонецЕсли;
    Сообщить("Сценарий завершён без исключения. Отдельно сверяйте контрольные Истина и видимые данные учебного клиента");
КонецПроцедуры

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

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

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

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

  2. ОжидатьОтображениеОбъекта возвращает Булево, не найденный объект. Для дальнейших действий объект получают отдельно.

  3. ОжидатьСостояния вызывает функцию, возвращающую Истина/Ложь, с периодичностью по механизму тестирования. Не пишем цикл Пока со сном в клиентском обработчике.

  4. Экспортная функция получает дополнительные параметры уведомления. Ищет конкретное поле с таймаутом 1 секунда и сравнивает отображаемое значение.

  5. Отрицательная проверка заведомо отсутствующей собственной формы ожидает всего 1 секунду. Ложь — нормальный результат истечения ожидания, не исключение.

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

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

  1. Три контрольных Истина: форма есть, количество первой Книги равно 3, отсутствующая форма не появилась.

  2. Если количество уже менялось предыдущим тестом, закройте и заново откройте fixture; не подменяйте ожидаемое значение фактическим ради зелёного результата.

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

Показано ограниченное ожидание объекта и состояния с настоящей экспортной функцией проверки.

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

  1. ОжидатьСостояния не принимает обычную процедуру без возвращаемого Булево.

  2. Слишком долгие действия внутри функции проверки могут увеличить реальную длительность ожидания.

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

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

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

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

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