Снова ошибка при вызове ЖдатьСменуТекущегоЭлемента: Время ожидания операции истекло

tormozit Закрыто Средний

8.3.24
Ошибка сегодня случалась много раз подряд при выполнении команды "ИР перейти к определению" при неразвернутых окнах модулей. Недавно я раскомментировал вызов ЖдатьСменуТекущегоЭлемента, т.к. других способов обойти возникшую тогда проблему мы не нашли. Но теперь стала снова возникать старая ошибка с этим методом. Она и в прошлую попытку его использования возникала. Поэтому я тогда закомментировал ее вызов. Но теперь похоже придется разбираться.

После нескольких проявлений, ошибка самоустранилась.

ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 718 / Внешнее исключение (System.Runtime.InteropServices.COMException): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)}
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 2000, Истина); // Не отключать в 8.3.24+! https://turboconf.ru/Tasks/8742
---> System.Runtime.InteropServices.COMException: Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
в 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)

 `	СтарыйИД = Неопределено;
Если Не ЗагрузитьТочкиОстановаИзФайлаВОткрытомОкнеТочекОстанова(ИмяВременногоФайла, СтарыйИД) Тогда
	Возврат Ложь;
КонецЕсли;
НомерВерсииПлатформы = МодулиИР.ирКэш.НомерВерсииПлатформыЛкс();
Если НомерВерсииПлатформы < 803024 Тогда
	ЧислоКолонок = 3;
Иначе
	ЧислоКолонок = 4;
КонецЕсли;
НачМомент = ТекущаяДата();
ПредСтрока = Неопределено;
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 2000, Истина); // Не отключать в 8.3.24+! https://turboconf.ru/Tasks/8742

`
Команду вызывал в табличном документе в ячейке, содержащей полное имя метода общего модуля.

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

RDT.os

Комментарии

tormozit
#1, ред. 31 декабря 2023 18:57

Сегодня эта ошибка случилась около 10 раз.
Ссылка скрыта


tormozit
#2, ред. 01 января 2024 11:10

В вызов метода ЖдатьСменуТекущегоЭлемента я уже пару месяцев передаю СтарыйИД=Неопределено.

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

ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 854 / Внешнее исключение (System.Runtime.InteropServices.COMException): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)}
СтарыйИД = ТурбоКонф.ПолучитьRuntimeId(); // Тут часто возвникает ошибка - Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
---> System.Runtime.InteropServices.COMException: Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
в UIAutomationClient.IUIAutomation.GetFocusedElement()
в TurboConf.Core.TurboAPI.TurboApi.GetCurrentElementRuntimeId(Int32 parentLevels)
в TurboConf.HostApplication.Api.GetCurrentElementRuntimeId()
в lambda_method(Closure , Api , IValue[] )
в ScriptEngine.Machine.Contexts.AutoContext`1.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(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)

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


tormozit
#3, ред. 01 января 2024 12:41

Вроде бы удалось победить проблему путем оборачивания вызова ПолучитьRuntimeIdСтрокой() в попытку. Подряд 30 из 30 раз тест прошел успешно.

СтарыйИД = Неопределено;
Попытка
	СтарыйИД = ТурбоКонф.ПолучитьRuntimeIdСтрокой(); // Тут часто возвникает ошибка - Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
Исключение
КонецПопытки; 
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 2000, Истина); // Не отключать в 8.3.24+! https://turboconf.ru/Tasks/8742


tormozit
#4, ред. 10 января 2024 17:38

Все таки и с предварительным вызовом ПолучитьRuntimeIdСтрокой() исходная ошибка все равно иногда возникает. Сейчас она случалась у меня много раз подряд. Переоткрытие окна модуля не помогло.

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


tormozit
#5, 11 января 2024 16:34

Опять стала возникать эта ошибка

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


tormozit
#6, 11 января 2024 18:25

Вернулся к варианту ЖдатьОкно(). Сейчас помогло. Но думаю это не надолго, т.к. этот способ я уже пробовал ранее.
ТурбоКонф.ЖдатьОкно("Точки останова", 2000, Истина)


bolsun
#7, 13 января 2024 20:10

(6) tormozit, не знаю почему такие проблемы вообще возникают с функцией ЖдатьОкно. У себя такого не замечал, она всегда ждет окно корректно.

Вызов ЖдатьСменуТекущегоЭлемента между разными окнами (особенно модальными) как показала практика может вызывать ошибки. Т.к. окно уже/еще может не существовать при выполнении запроса UIAutomation или еще по каким-то причинам. В пределах одного окна таких проблем не возникает.


bolsun
#8, ред. 13 февраля 2024 16:12

(6) tormozit, я сейчас дополнительно к ожиданию окна, использую метод ЖдатьТипТекущегоЭлемента()
Вроде работает надежно.

ТурбоКонф.CtrlKey(Keys.S);
ТурбоКонф.ЖдатьОкно("Сохранить точки останова в файл", 5000)
ТурбоКонф.ЖдатьТипТекущегоЭлемента("поле|edit", 500)


bolsun
#9, 15 февраля 2024 00:36

Если проблема сохранится с учетом рекомендаций выше, откройте тикет заново.
bolsun изменил статус на Закрыто


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