Есть задача - открывать страницу настроек "Модули" конфигуратора.
Выполняю скрипт
ТурбоКонф.АктивироватьОкно(Конфигуратор.ГлавноеОкно);
Если Не ТурбоКонф.НайтиЭлементПоИмени("Сервис", "кнопка") Тогда
Возврат Ложь;
КонецЕсли;
ИмяЭлемента = "Сервис";
ТурбоКонф.КликнутьПоЭлементу("Сервис", "кнопка", 0, Ложь);
Если ТурбоКонф.ПолучитьИмяЭлемента() <> ИмяЭлемента Тогда
Возврат Ложь;
КонецЕсли;
ИмяЭлемента = "Параметры...";
//ТурбоКонф.КликнутьПоЭлементу(ИмяЭлемента, "кнопка", 0, Ложь); // Почему то не работает, хотя в Мультиметка777238164 работает
ТурбоКонф.Клавиша(Клавиши.Up);
Если ТурбоКонф.ПолучитьИмяЭлемента() <> ИмяЭлемента Тогда
Возврат Ложь;
КонецЕсли;
ТурбоКонф.Клавиша(Клавиши.Enter);
ТурбоКонф.ЖдатьСменуАктивногоОкна(ТурбоКонф.ПолучитьАктивноеОкно(), 1000, Ложь);
ТурбоКонф.Ждать(200);
ТурбоКонф.КликнутьПоЭлементу("Модули", "элемент вкладки", 0, Ложь);
Неожиданности
Ссылка скрыта
#1, ред. 26 мая 2024 09:02
Есть ли в Турбоконфе проброс метода Window.WaitForInputIdle из UIAutomation? Кажется именно его надо использовать, чтобы дожидаться момента когда окно может принять команду ввода.
#2, ред. 26 мая 2024 14:07
По п.2 из текущих возможностей Турбоконфа нашел только способ через ЖдатьСменуТекущегоЭлемента() для надежного решения задачи
Он довольно неудобный и главное - не очевидный для столь частой задачи. Я уже много раз это отмечал.
Нужно как то упростить решение таких задач.
#3, 26 мая 2024 09:49
Прошу в методе ЖдатьОкно() и подобных добавить параметр "ЖдатьДоступностиВвода" (Булево). Если он Истина, то нужно вызывать Window.WaitForInputIdle.
#4, 26 мая 2024 13:51
Зачем это все? Есть метод
ТурбоКонф.ОткрытьМеню("Сервис", "Параметры...")
bolsun изменил статус на Открыто
#5, 26 мая 2024 14:15
(4) bolsun, Для п.1 ОткрытьМеню() проверил. Работает. Но тут главная проблема в п.2 все таки. ОткрытьМеню() тут меняет ничего.
#6, 26 мая 2024 17:07
Проверил WaitForInputIdle - всегда возвращает true
Время ожидания тоже почти константа - 70-90 мс (не важно открыто уже окно или вызывается новое).
Также в описании этого метода написано, что не стоит полагаться на него, для определения активности окна.
Возможно стоит просто увеличить задержку 200 мс - может быть недостаточно.
ТурбоКонф.Ждать(500);
#7, 26 мая 2024 17:16
Хотя даже этот код у меня срабатывает всегда
#8, ред. 05 июня 2024 15:13
(7) bolsun, как и любая фиксированной длительности задержка, это - менее надежный и более долгий способ, чем циклическое условное ожидание (2). Можно его рекомендовать его для случаев, когда не требуется высокой надежности и скорости в работе кода.