Udostępnij za pośrednictwem


Uzyskiwanie elementów automatyzacji interfejsu użytkownika

Uwaga / Notatka

Ta dokumentacja jest przeznaczona dla deweloperów programu .NET Framework, którzy chcą używać zarządzanych klas automatyzacji interfejsu użytkownika zdefiniowanych w przestrzeni nazw System.Windows.Automation. Aby uzyskać najnowsze informacje na temat automatyzacji interfejsu użytkownika, zobacz Windows Automation API: Automatyzacja interfejsu użytkownika.

W tym temacie opisano różne sposoby uzyskiwania AutomationElement obiektów dla elementów interfejsu użytkownika.

Ostrzeżenie

Jeśli aplikacja kliencka może próbować znaleźć elementy we własnym interfejsie użytkownika, należy wykonać wszystkie wywołania automatyzacji interfejsu użytkownika w osobnym wątku. Aby uzyskać więcej informacji, zobacz Problemy z wątkami automatyzacji interfejsu użytkownika.

Element główny

Wszystkie wyszukiwania obiektów AutomationElement muszą mieć miejsce początkowe. Może to być dowolny element, w tym pulpit, okno aplikacji lub kontrolka.

Podstawowy element pulpitu, od którego wywodzą się wszystkie inne elementy, jest uzyskiwany z właściwości statycznej AutomationElement.RootElement.

Ostrzeżenie

Ogólnie rzecz biorąc, należy spróbować uzyskać tylko bezpośrednich potomków elementu RootElement. Wyszukiwanie potomków może iterować przez setki lub nawet tysiące elementów, co może spowodować przepełnienie stosu. Jeśli próbujesz uzyskać określony element na niższym poziomie, należy rozpocząć wyszukiwanie w oknie aplikacji lub z kontenera na niższym poziomie.

Conditions

W przypadku większości technik używanych do pobierania elementów automatyzacji interfejsu użytkownika należy określić Condition, który jest zestawem kryteriów definiujących, jakie elementy mają zostać pobrane.

Najprostszym warunkiem jest TrueCondition, wstępnie zdefiniowany obiekt określający, że wszystkie elementy w zakresie wyszukiwania mają zostać zwrócone. FalseCondition, odwrotność elementu TrueCondition, jest mniej przydatna, ponieważ uniemożliwiłaby odnalezienie żadnych elementów.

Trzy inne wstępnie zdefiniowane warunki mogą być używane samodzielnie lub w połączeniu z innymi warunkami: ContentViewCondition, ControlViewConditioni RawViewCondition. RawViewCondition, używany samodzielnie, jest odpowiednikiem elementu TrueCondition, ponieważ nie filtruje elementów według ich właściwości IsControlElement ani IsContentElement.

Inne warunki są tworzone na podstawie jednego lub większej liczby PropertyCondition obiektów, z których każdy określa wartość właściwości. Na przykład element PropertyCondition może określać, że element jest włączony lub czy obsługuje określony wzorzec kontrolki.

Warunki można łączyć przy użyciu logiki logicznej, tworząc obiekty typów AndCondition, OrConditioni NotCondition.

Zakres wyszukiwania

Wyszukiwania wykonywane przy użyciu FindFirst lub FindAll muszą mieć zarówno zakres, jak i miejsce początkowe.

Zakres definiuje przestrzeń wokół miejsca początkowego, które ma zostać przeszukane. Może to obejmować sam element, jego rodzeństwo, rodzic, jego przodków, jego najbliższe dzieci i jego potomków.

Zakres wyszukiwania jest definiowany przez bitową kombinację wartości z TreeScope wyliczenia.

Znajdowanie znanego elementu

Aby znaleźć znany element, zidentyfikowany przez Name, AutomationId lub inną właściwość bądź kombinację właściwości, najłatwiej jest użyć metody FindFirst. Jeśli poszukiwany element jest oknem aplikacji, punktem początkowym wyszukiwania może być RootElement.

Ten sposób znajdowania elementów automatyzacji interfejsu użytkownika jest najbardziej przydatny w scenariuszach zautomatyzowanego testowania.

Znajdowanie elementów w poddrzewie

Aby znaleźć wszystkie elementy spełniające określone kryteria powiązane ze znanym elementem, możesz użyć polecenia FindAll. Można na przykład użyć tej metody, aby pobrać elementy listy lub elementy menu z listy lub menu albo zidentyfikować wszystkie kontrolki w oknie dialogowym.

Spacer po poddrzewie

Jeśli nie masz wcześniejszej wiedzy na temat aplikacji, z którymi może korzystać klient, możesz utworzyć poddrzewo wszystkich interesujących cię elementów przy użyciu TreeWalker klasy . Aplikacja może zareagować na zdarzenie zmiany uwagi; oznacza to, że gdy aplikacja lub kontrolka otrzymuje uwagę na dane wejściowe, klient UI Automation sprawdza elementy podrzędne, a być może wszystkie pochodne elementu, który stał się centrum uwagi.

Innym sposobem, w jaki TreeWalker można użyć, jest zidentyfikowanie przodków elementu. Na przykład, przechodząc w górę drzewa, można zidentyfikować okno nadrzędne kontrolki.

Można użyć TreeWalker poprzez utworzenie obiektu klasy (definiując elementy zainteresowania, przekazując Condition), lub używając jednego z poniższych wstępnie zdefiniowanych obiektów, zdefiniowanych jako pola TreeWalker.

Pole Opis
ContentViewWalker Znajduje tylko elementy, których IsContentElement właściwość to true.
ControlViewWalker Znajduje tylko elementy, których IsControlElement właściwość to true.
RawViewWalker Znajduje wszystkie elementy.

Po uzyskaniu TreeWalker, używanie go jest proste. Wystarczy wywołać Get metody, aby nawigować między elementami poddrzewa.

Metoda Normalize może służyć do przechodzenia do elementu w poddrzewie z innego elementu, który nie jest częścią widoku. Załóżmy na przykład, że utworzono widok poddrzewa przy użyciu ContentViewWalker. Następnie aplikacja otrzymuje powiadomienie, że pasek przewijania uzyskał fokus wejściowy. Ponieważ pasek przewijania nie jest elementem zawartości, nie jest obecny w widoku poddrzewa. Można jednak przekazać AutomationElement reprezentujący pasek przewijania do Normalize i odnaleźć najbliższego przodka, który znajduje się w widoku zawartości.

Inne sposoby pobierania elementu

Oprócz wyszukiwania i nawigacji, możesz pobrać element AutomationElement w następujący sposób.

Ze zdarzenia

Gdy aplikacja odbiera zdarzenie automatyzacji interfejsu użytkownika, obiekt źródłowy przekazany do programu obsługi zdarzeń to AutomationElement. Jeśli na przykład zasubskrybujesz zdarzenia zmiany fokusu, źródłem przekazanym do AutomationFocusChangedEventHandler jest element, który otrzymał fokus.

Aby uzyskać więcej informacji, zobacz Subskrybowanie zdarzeń automatyzacji interfejsu użytkownika.

Od punktu

Jeśli masz współrzędne ekranu (na przykład położenie kursora), możesz pobrać obiekt AutomationElement przy użyciu metody statycznej FromPoint .

Z uchwytu okna

Aby pobrać element AutomationElement z HWND, użyj metody statycznej FromHandle .

Z ukierunkowanego elementu sterującego

Możesz pobrać kontrolkę AutomationElement reprezentującą fokus z właściwości statycznej FocusedElement .

Zobacz także