Не могу понять как надежно открыть страницу настроек конфигуратора

tormozit Открыто

Есть задача - открывать страницу настроек "Модули" конфигуратора.
Выполняю скрипт

ТурбоКонф.АктивироватьОкно(Конфигуратор.ГлавноеОкно);
	Если Не ТурбоКонф.НайтиЭлементПоИмени("Сервис", "кнопка") Тогда
		Возврат Ложь;
	КонецЕсли;
	ИмяЭлемента = "Сервис";
	ТурбоКонф.КликнутьПоЭлементу("Сервис", "кнопка", 0, Ложь);
	Если ТурбоКонф.ПолучитьИмяЭлемента() <> ИмяЭлемента Тогда
		Возврат Ложь;
	КонецЕсли;
	ИмяЭлемента = "Параметры...";
	//ТурбоКонф.КликнутьПоЭлементу(ИмяЭлемента, "кнопка", 0, Ложь); // Почему то не работает, хотя в Мультиметка777238164 работает
	ТурбоКонф.Клавиша(Клавиши.Up);
	Если ТурбоКонф.ПолучитьИмяЭлемента() <> ИмяЭлемента Тогда
		Возврат Ложь;
	КонецЕсли;
	ТурбоКонф.Клавиша(Клавиши.Enter);
	ТурбоКонф.ЖдатьСменуАктивногоОкна(ТурбоКонф.ПолучитьАктивноеОкно(), 1000, Ложь);
	ТурбоКонф.Ждать(200);
	ТурбоКонф.КликнутьПоЭлементу("Модули", "элемент вкладки", 0, Ложь);

Неожиданности

  1. Почему то клик на пункт меню "Параметры..." всегда не срабатывает. Приходится отправлять клавишу ENTER.
  2. Почему то последний клик по заголовку страницы "Модули" иногда не срабатывает. И если он не сработал, то я отправляю нажатие Escape для закрытия окна настроек, но оно почему то вызывает открытие меню "Пуск" на панели задач ОС. Вероятность возникновения этой ошибки увеличивается при уменьшении задержки ТурбоКонф.Ждать(200). Как правильно дождаться в данном случае?

Ссылка скрыта

Комментарии

tormozit
#1, ред. 26 мая 2024 09:02

Есть ли в Турбоконфе проброс метода Window.WaitForInputIdle из UIAutomation? Кажется именно его надо использовать, чтобы дожидаться момента когда окно может принять команду ввода.


tormozit
#2, ред. 26 мая 2024 14:07

По п.2 из текущих возможностей Турбоконфа нашел только способ через ЖдатьСменуТекущегоЭлемента() для надежного решения задачи

	СтарыйИД = ТурбоКонф.ПолучитьRuntimeIdСтрокой();
	ТурбоКонф.Клавиша(Клавиши.Enter);
	ТурбоКонф.ЖдатьОкно("Параметры", 1000, Истина);
	ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 1000, Истина);
	ТурбоКонф.КликнутьПоЭлементу("Модули", "элемент вкладки", 0, Ложь);
	ТурбоКонф.КликнутьПоЭлементу("Контекстная подсказка", "элемент вкладки", 0, Ложь);

Он довольно неудобный и главное - не очевидный для столь частой задачи. Я уже много раз это отмечал.
Нужно как то упростить решение таких задач.


tormozit
#3, 26 мая 2024 09:49

Прошу в методе ЖдатьОкно() и подобных добавить параметр "ЖдатьДоступностиВвода" (Булево). Если он Истина, то нужно вызывать Window.WaitForInputIdle.


bolsun
#4, 26 мая 2024 13:51

Зачем это все? Есть метод
ТурбоКонф.ОткрытьМеню("Сервис", "Параметры...")
bolsun изменил статус на Открыто


tormozit
#5, 26 мая 2024 14:15

(4) bolsun, Для п.1 ОткрытьМеню() проверил. Работает. Но тут главная проблема в п.2 все таки. ОткрытьМеню() тут меняет ничего.


bolsun
#6, 26 мая 2024 17:07

Проверил WaitForInputIdle - всегда возвращает true
Время ожидания тоже почти константа - 70-90 мс (не важно открыто уже окно или вызывается новое).

Также в описании этого метода написано, что не стоит полагаться на него, для определения активности окна.

Возможно стоит просто увеличить задержку 200 мс - может быть недостаточно.
ТурбоКонф.Ждать(500);


bolsun
#7, 26 мая 2024 17:16

Хотя даже этот код у меня срабатывает всегда

ТурбоКонф.ОткрытьМеню("Сервис", "Параметры...");
ТурбоКонф.ЖдатьОкно("Параметры", 5000, Истина);
ТурбоКонф.Ждать(200);
ТурбоКонф.КликнутьПоЭлементу("Модули", "элемент вкладки", 0, Ложь);
ТурбоКонф.КликнутьПоЭлементу("Контекстная подсказка", "элемент вкладки", 0, Ложь);


tormozit
#8, ред. 05 июня 2024 15:13

(7) bolsun, как и любая фиксированной длительности задержка, это - менее надежный и более долгий способ, чем циклическое условное ожидание (2). Можно его рекомендовать его для случаев, когда не требуется высокой надежности и скорости в работе кода.


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера