ТестируемоеПриложение.НайтиОбъект

Методы · FindObject

Осуществляет поиск среди иерархии подчиненных объектов по указанным параметрам.

Синтаксис

НайтиОбъект(<Тип>, <ТекстЗаголовка>, <Имя>, <Таймаут>)
Полное описание, параметры и ограничения

ТестируемоеПриложение.НайтиОбъект (TestedApplication.FindObject)

ТестируемоеПриложение (TestedApplication)

НайтиОбъект (FindObject)

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

Синтаксис:
НайтиОбъект(<Тип>, <ТекстЗаголовка>, <Имя>, <Таймаут>)
Параметры:

<Тип> (необязательный)
Тип: Тип.
Тип объекта, который нужно найти.
Значение по умолчанию: Неопределено.

<ТекстЗаголовка> (необязательный)
Тип: Строка.
Заголовок объекта, если это применимо. Может содержать знаки подстановки "*" и "?".

<Имя> (необязательный)
Тип: Строка.
Имя объекта, если это применимо. Может содержать знаки подстановки "*" и "?".

<Таймаут> (необязательный)
Тип: Число.
Время в секундах, в течение которого выполняется поиск объекта. Если значение параметра не задано, время поиска не ограничено.
Значение по умолчанию: 0.
Возвращаемое значение:
Тип: ТестируемоеОкноКлиентскогоПриложения, ТестируемаяФорма, ТестируемаяГруппаФормы, ТестируемаяКнопкаФормы, ТестируемаяТаблицаФормы, ТестируемоеПолеФормы, ТестируемаяДекорацияФормы, Неопределено.
Первый найденный объект или Неопределено, если объект не найден.
Описание:

Осуществляет поиск среди иерархии подчиненных объектов по указанным параметрам.

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

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

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

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

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

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

Проверить собственные формы, активное окно и наличие ошибки

Читаем дерево и состояние клиента тестирования, не закрывая приложение и не нажимая системные окна.

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

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

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

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

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

  2. НайтиОбъект при отсутствии возвращает Неопределено, НайтиОбъекты — фиксированный массив. Даже при точном заголовке может быть несколько открытых копий; не берём элемент 0 без проверки.

  3. ПолучитьПодчиненныеОбъекты показывает корневые тестируемые объекты, не все строки данных базы. ПолучитьАктивноеОкно не гарантирует, что это именно наша обработка.

  4. ПолучитьТекущуюИнформациюОбОшибке возвращает ИнформацияОбОшибке только если в тестируемом клиенте отображается окно ошибки. Неопределено — нормальное отсутствие.

  5. Для отдельной ручной проверки в расширенном fixture нажмите УчебнаяОшибка. Затем запустите чтение в менеджере: проверяется только собственный маркер, не выводится полный стек.

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

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

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

  1. Собственная форма найдена; число точных совпадений соответствует реально открытым копиям.

  2. Без отображаемой ошибки выводится её отсутствие. Для контролируемой ошибки с кнопки проверка маркера должна дать Истина; чужой текст не публикуется.

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

Разобрана разница между поиском объекта, активным окном и текущей ошибкой клиента.

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

  1. Не интерпретируйте отсутствие окна ошибки как отсутствие всех ошибок приложения.

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

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

Закрыть только свою учебную форму и дождаться её закрытия

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

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

Полный модуль формы менеджера /TESTMANAGER; fixture открыт отдельно в /TESTCLIENT.

Подготовка

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

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

  3. В fixture назначьте событие ПриСозданииНаСервере одноимённому обработчику и вставьте весь модуль первого урока. Элементы и реквизиты вручную не создавайте. Откройте эту обработку в /TESTCLIENT.

  4. Каждый следующий урок — полный отдельный модуль формы другой обработки менеджера /TESTMANAGER с командой ВыполнитьПример. Перед каждым тестом заново откройте fixture; не выполняйте тест на изменённом состоянии предыдущего урока.

  5. Исходно первое поле Книга, второе Ручка, статус Готово, выбор book/Книга. Любые кнопки/ссылки действуют только на этой памяти формы; нет записи базы и внешних URL.

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

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

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

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

  1. Тест подключается только к своему 127.0.0.1:15380 и получает точную собственную форму с таймаутом 10 секунд.

  2. ОжидатьЗакрытие возвращает Булево. Первый вызов на открытой форме ограничен одной секундой и ожидается Ложь.

  3. Кнопку по умолчанию проверяем по точному собственному имени до Нажать. Нельзя полагаться на то, что кнопка по умолчанию всегда отменяет запись.

  4. Обработчик fixture обнуляет признак модифицированности собственной памяти и закрывает только форму. Рабочего документа в ней нет.

  5. После пятисекундного ожидания повторный поиск собственного заголовка должен вернуть Неопределено; клиент приложения остаётся работать.

  6. Исходный лимит действий восстанавливается, соединение отдельно разрывается и при ошибке. Разрыв соединения не закрывает весь тестируемый клиент.

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

  1. Три проверки ожидаются Истина. Исчезла только собственная учебная форма.

  2. Менеджер отдельно восстановил лимит и разорвал соединение. Этот тест выполняйте последним, затем fixture надо открыть заново.

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

Показано безопасное закрытие известной учебной формы с двумя ограниченными ожиданиями.

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

  1. Не закрывать основное окно приложения ради ожидания формы.

  2. Не вызывать ОжидатьЗакрытие без таймаута: возможна ненужная долгая блокировка теста.

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

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

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

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

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