2014-10-14 4 views
1

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

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

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

ответ

5

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

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

+0

Что делать, если AutomationID не существует? и я не уверен, что такое Контекст, о котором вы говорите, не могли бы вы объяснить. – ResVict

+0

Контекст не является техническим термином: где в дереве автоматизации есть элемент? какие другие свойства доступны на нем? и т.д? Какие данные доступны для использования, будет зависеть от конкретного поставщика автоматизации, на который вы смотрите. –

+0

Ох, я вижу, вы можете предложить определенный набор свойств, который формирует уникальный кортеж для элемента. До сих пор я мог только думать о ProcessName и ClassName обо всех элементах иерархии дерева автоматизации от Root до TargetElement, но определенно это неверно. – ResVict