Есть ли способ сохранить элемент UIAutomation?

Я работаю с MS UIAutomation в Windows 7 (64-разрядная версия). Я хочу знать, возможно ли сохранить элемент UIAutomation, если да, то что может быть отправной точкой для этого.

Единственное, что я придумал, это RuntimeID элемента, но проблема в том, что некоторые элементы могут не иметь id.

Простой сценарий, которого я хочу добиться, заключается в том, что я узнаю элемент UIAutomation элемента управления на экране с помощью AutomationElement.FromPoint(), теперь я хочу сохранить его, чтобы в следующий раз я мог легко получить к нему доступ, «загрузив» его обратно в UIAutomation Element.


person ResVict    schedule 14.10.2014    source источник


Ответы (1)


Нет, вы не можете сохранить элемент UIAutomation из клиента автоматизации. Вам нужно будет хранить достаточно информации об элементе (идентификатор автоматизации и контекст лучше всего, если они доступны), чтобы снова найти его в следующий раз.

Элемент является ссылкой на объект в (возможно) каком-то другом процессе, и он может существовать только до тех пор, пока этот другой процесс позволяет ему. Элементы, скорее всего, исчезнут, когда их окна закроются, приложение и т. д. Такие элементы, как меню и всплывающие окна, скорее всего, будут очень недолговечными и могут перестать существовать к тому времени, когда клиент получит уведомление.

person Rob Caplan - MSFT    schedule 14.10.2014
comment
Что делать, если AutomationID отсутствует? и я не уверен, о каком контексте вы говорите, не могли бы вы объяснить. - person ResVict; 14.10.2014
comment
Контекст — это не технический термин: где в дереве автоматизации находится элемент? какие другие свойства доступны на нем? так далее? Какие данные доступны для использования, зависит от конкретного поставщика автоматизации, которого вы ищете. - person Rob Caplan - MSFT; 14.10.2014
comment
О, понятно, можете ли вы предложить конкретный набор свойств, который формирует уникальный кортеж для элемента. До сих пор я мог думать только о ProcessName и ClassName всех элементов в иерархии дерева автоматизации от Root до TargetElement, но это определенно неправильно. - person ResVict; 15.10.2014
comment
Не существует такого универсального набора свойств (кроме AutomationId относительно его родителя, который, как вы указали, противоречив). Это будет зависеть от конкретного приложения, которое вы пытаетесь автоматизировать. - person Rob Caplan - MSFT; 16.10.2014