(8) tormozit, насколько я понял, скорее всего, как я уже говорил метод ЖдатьСменуТекущегоЭлемента (WaitForCurrentElementChanged) в разных дочерних окнах может вызывать ошибку и он в этом случае ненадежен. Когда окно закрывается UIAutomation не может обработать запрос и вызывает исключение по таймауту.
0
tormozit #10, 25 сентября 2024 23:36
@vigor, пробуй заменить Турбоконф.ЖдатьСменуТекущегоЭлемента() на Турбоконф.Ждать(1000)
0
vigor #11, 26 сентября 2024 07:41
Так работает. Даже Ждать(50) работает. И с одним нажатием Enter.
0
tormozit #12, 26 сентября 2024 07:54
@bolsun в логе я вижу, что заданные в параметре 3000мс не выжидаются и ошибка выдается сразу. Кажется тут что то некорректно работает внутри самого метода ЖдатьСменуТекущегоЭлемента.
[25.09.24 19:32:33:423] -------------------------------------------UIAutomation Focus Changed = Универсальные коллекции значений/Таблица значений/КоллекцияКолонокТаблицыЗначений/Методы/Найти
[25.09.24 19:32:33:426] Error: Не удалось выполнить скрипт ИРАдаптер->СинтаксПомощник
ScriptEngine.Machine.ExternalSystemException: {Модуль D:\1S\BSL\TURBOCONF HUB\TurboConf_RDT 6.1\user_scripts\RDT.os / Ошибка в строке: 1259 / Внешнее исключение (System.Runtime.InteropServices.COMException): Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)}
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 3000, Истина);
---> System.Runtime.InteropServices.COMException: Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)
в TurboConf.HostApplication.Api.WaitForCurrentElementChanged(String currentRuntimeId, Int32 timeout, Boolean throwException)
в lambda_method(Closure , Api , IValue[] )
в ScriptEngine.Machine.Contexts.AutoContext`1.CallAsProcedure(Int32 methodNumber, IValue[] arguments)
в ScriptEngine.Machine.MachineInstance.ResolveMethodProc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
--- Конец трассировки внутреннего стека исключений ---
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, ScriptOptions options, IVariable[] parameters)
[25.09.24 19:32:33:426] Set IsProcess: False
0
tormozit #13, 26 сентября 2024 08:01
@vigor пробуй такой вариант
Процедура НайтиСтрокуВОкне(Знач ИскомаяСтрока) Экспорт
СтарыйИД = ТурбоКонф.ПолучитьRuntimeIdСтрокой();
ТурбоКонф.КонтролКлавиша(Клавиши.F);
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 1000, Истина);
//ТурбоКонф.ЖдатьОкно("Поиск", 1000, Истина); // Не работает
ТурбоКонф.УстановитьЗначение(ИскомаяСтрока);
//ТурбоКонф.ВставитьТекст(ИскомаяСтрока);
СтарыйИД = ТурбоКонф.ПолучитьRuntimeIdСтрокой();
ТурбоКонф.Клавиша(Клавиши.Enter);
Попытка
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 1000, Истина);
Исключение
// Возникает непонятная ошибка https://turboconf.ru/Tasks/9760
ТурбоКонф.Ждать(100);
КонецПопытки;
КонецПроцедуры
0
vigor #14, ред. 26 сентября 2024 09:13
Так срабатывает.
0
tormozit #15, 26 сентября 2024 08:17
(14) vigor, создавай заявку
0
vigor #16, ред. 26 сентября 2024 09:12
(15) tormozit,
п.с. на 8-й секунде видео из поста (14), если замедлить, появляется модальное окно "Строка не найдена!". Может из-за этого как-то теряется фокус при ожидании смены окна?
0
tormozit #17, 26 сентября 2024 09:07
(16) vigor, какого видео? Тут уже 2 видео. Удали лишние сообщения из этой заявки, чтобы не путать читателей.
Я в обоих видео не увидел окно "Строка не найдена". Сделай снимок кадра с отметкой времени.
0
vigor #18, ред. 26 сентября 2024 09:20
(17) tormozit,
Поправил сообщение 16.
Скрин с видео прикрепил. Отметка времени - внизу справа скрина. Смотрел с сильным замедлением.
0
tormozit #19, 26 сентября 2024 09:21
(18) vigor, так и задумано
0
vigor #20, 26 сентября 2024 09:39
Тогда ок. С учетом изменения кода из (13), закрываю.
vigor изменил статус на Закрыто
0
bolsun #21, 26 сентября 2024 11:09
(12) tormozit, если вызвать ЖдатьСменуТекущегоЭлемента сразу после закрытия модального окна (я так понял это происходит), то платформа не сможет ответить на вызов UIAutomation и будет выдано исключение.
Как вариант могу попробовать просто игнорировать подобную ошибку в методе ЖдатьСменуТекущегоЭлемента и продолжать ждать дальше.
#1, 25 сентября 2024 10:57
Опиши действия пользователя.
tormozit изменил статус на Открыто
#2, ред. 25 сентября 2024 13:56
33ZwMy6.mp4
В первый раз, когда пробовал записать - всё открылось. Потом, закрывал адаптер, открывал - уже ошибка.
Ошибка:
#3, 25 сентября 2024 16:45
Попробуй заменить 1000 на 2000
#4, 25 сентября 2024 18:24
Ни 2000, ни 3000 не срабатывает.
Открывается глава СП, если в строке 1258 вызвать Enter 2 раза:
ТурбоКонф.Клавиша(Клавиши.Enter, 2);
при этом, дальше всё равно та же ошибка
#5, 25 сентября 2024 18:26
Тогда нужен лог Турбоконфа.
#6, 25 сентября 2024 18:39
Ссылка скрыта
#7, 25 сентября 2024 23:21
Посмотрел все материалы. Воспроизвести не смог. Из лога не удалось понять в чем проблема.
@bolsun, нужна твоя помощь
#8, 25 сентября 2024 23:26
Вероятно как то связано с проблемой https://turboconf.ru/Tasks/9620
#9, ред. 25 сентября 2024 23:33
(8) tormozit, насколько я понял, скорее всего, как я уже говорил метод ЖдатьСменуТекущегоЭлемента (WaitForCurrentElementChanged) в разных дочерних окнах может вызывать ошибку и он в этом случае ненадежен. Когда окно закрывается UIAutomation не может обработать запрос и вызывает исключение по таймауту.
#10, 25 сентября 2024 23:36
@vigor, пробуй заменить Турбоконф.ЖдатьСменуТекущегоЭлемента() на Турбоконф.Ждать(1000)
#11, 26 сентября 2024 07:41
Так работает. Даже Ждать(50) работает. И с одним нажатием Enter.
#12, 26 сентября 2024 07:54
@bolsun в логе я вижу, что заданные в параметре 3000мс не выжидаются и ошибка выдается сразу. Кажется тут что то некорректно работает внутри самого метода ЖдатьСменуТекущегоЭлемента.
[25.09.24 19:32:33:423] -------------------------------------------UIAutomation Focus Changed = Универсальные коллекции значений/Таблица значений/КоллекцияКолонокТаблицыЗначений/Методы/Найти
[25.09.24 19:32:33:426] Error: Не удалось выполнить скрипт ИРАдаптер->СинтаксПомощник
ScriptEngine.Machine.ExternalSystemException: {Модуль D:\1S\BSL\TURBOCONF HUB\TurboConf_RDT 6.1\user_scripts\RDT.os / Ошибка в строке: 1259 / Внешнее исключение (System.Runtime.InteropServices.COMException): Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)}
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 3000, Истина);
---> System.Runtime.InteropServices.COMException: Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)
в TurboConf.HostApplication.Api.WaitForCurrentElementChanged(String currentRuntimeId, Int32 timeout, Boolean throwException)
в lambda_method(Closure , Api , IValue[] )
в ScriptEngine.Machine.Contexts.AutoContext`1.CallAsProcedure(Int32 methodNumber, IValue[] arguments)
в ScriptEngine.Machine.MachineInstance.ResolveMethodProc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
--- Конец трассировки внутреннего стека исключений ---
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, ScriptOptions options, IVariable[] parameters)
[25.09.24 19:32:33:426] Set IsProcess: False
#13, 26 сентября 2024 08:01
@vigor пробуй такой вариант
#14, ред. 26 сентября 2024 09:13
Так срабатывает.
#15, 26 сентября 2024 08:17
(14) vigor, создавай заявку
#16, ред. 26 сентября 2024 09:12
(15) tormozit,
п.с. на 8-й секунде видео из поста (14), если замедлить, появляется модальное окно "Строка не найдена!". Может из-за этого как-то теряется фокус при ожидании смены окна?
#17, 26 сентября 2024 09:07
(16) vigor, какого видео? Тут уже 2 видео. Удали лишние сообщения из этой заявки, чтобы не путать читателей.
Я в обоих видео не увидел окно "Строка не найдена". Сделай снимок кадра с отметкой времени.
#18, ред. 26 сентября 2024 09:20
(17) tormozit,
Поправил сообщение 16.
Скрин с видео прикрепил. Отметка времени - внизу справа скрина. Смотрел с сильным замедлением.
#19, 26 сентября 2024 09:21
(18) vigor, так и задумано
#20, 26 сентября 2024 09:39
Тогда ок. С учетом изменения кода из (13), закрываю.
vigor изменил статус на Закрыто
#21, 26 сентября 2024 11:09
(12) tormozit, если вызвать ЖдатьСменуТекущегоЭлемента сразу после закрытия модального окна (я так понял это происходит), то платформа не сможет ответить на вызов UIAutomation и будет выдано исключение.
Как вариант могу попробовать просто игнорировать подобную ошибку в методе ЖдатьСменуТекущегоЭлемента и продолжать ждать дальше.
#22, 26 сентября 2024 22:43
(21) bolsun, добавил обработку этого исключения в 6.2.9036.1013
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg
Если есть возможность проверьте, осталась ли такая ошибка.
bolsun изменил статус на Открыто
#23, 27 сентября 2024 08:00
(22) bolsun, Проверил (убрав правки из (13)) - работает.
vigor изменил статус на Закрыто
#24, 29 сентября 2024 19:45
(13) tormozit, внес эту правку в адаптер 1.74