pywinauto: срок жизни оболочек
Для ускорения поиска оболочек мы помещаем их в словарь вида:
[wrapper.element_info.name] = wrapper
Было замечено, что, по мере работы с управляемым приложением, оболочки начинают вести себя так, как будто теряют значимость: например, некоторые кнопки перестают нажиматься, если взять оболочку из словаря. Почему так?
Ответы (1 шт):
Если приложение динамическое и пересоздаёт какие-то элементы, то очевидно, что на стороне Python скрипта "ссылки" на них протухают. Если хочется надёжности или устойчивости к перезапуску, то надо хранить спецификации окна, хотя за это и придётся заплатить повторным поиском каждый раз. Кэширование врапперов внутри спецификации окна у нас не реализовано, так что этот вопрос остаётся на пользователе. А вот ссылка на объект Application в спецификации окна хранится, поэтому если сделать .connect(...) к другому экземпляру того же приложения, спецификации окна продолжат находить нужные элементы. Это как раз было реализовано по запросу одного из пользователей в GitHub issues.
P.S. Надеюсь, ответы помогают. Об этом хорошо бы сигнализировать, помечая верные ответы как принятые (слева от ответа есть серый чек бокс, он работает независимо от репутации). Ну, и заодно это поддерживает мотивацию к дальнейшим ответам.
P.P.S. Привет из Нижнего.