UI Automation, Как получить базовый объект GUI? - PullRequest
1 голос
/ 23 февраля 2012

Я использую среду автоматизации пользовательского интерфейса (COM wrapper) для большей части моего тестирования, но я пришел к элементу управления, на котором не отображаются внутренние элементы управления, и я вообще не хочу делать Click (60, 100).

Я хотел знать, есть ли простой способ получить объект сам,

Я хочу использовать что-то вроде Control.FromHandle (), но, поскольку мое приложение не имеет тот же PID, что и тест, возвращается ноль.

Я думаю, что мне, возможно, придется использовать инъекцию, но я не знаю, смогу ли я передать объект GUI обратно в мой основной поток (из внедренного)

Я полагаю, что элемент управления - это ListBar (из инфраструктуры), если это поможет.

Любой совет будет оценен

1 Ответ

1 голос
/ 09 августа 2012

Как сказал Брендан, вы можете получить дескриптор (HWND / IntPtr) и затем использовать все достоинства Win32SDK с этим дескриптором.

У меня было несколько сценариев, где e. г. некоторые панели инструментов не предоставляют своих дочерних элементов через UIAutomation, но с помощью (сложных) вызовов SDK вы все равно можете их получить.

Имейте в виду, самое простое, а также (хотя и не надежное на 100%) решение - использовать координаты экрана относительно родительского элемента управления. Как правило, дети не меняют свою позицию, поэтому все работает нормально в 99,99% случаев.

Немного менее надежно, намного быстрее (немного во время выполнения, много во время разработки).

...