Uzyskiwanie elementów automatyzacji interfejsu użytkownika

Uwaga

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

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

Uwaga

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

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.

Element główny pulpitu, z którego wszystkie elementy są malejąco, jest uzyskiwany z właściwości statycznej AutomationElement.RootElement .

Uwaga

Ogólnie rzecz biorąc, należy spróbować uzyskać tylko bezpośrednie dzieci obiektu RootElement. Wyszukiwanie elementów potomnych 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.

Warunki

W przypadku większości technik można użyć do pobierania automatyzacja interfejsu użytkownika elementów, należy określić Conditionelement , który jest zestawem kryteriów definiujących, które 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 przez siebie, jest odpowiednikiem TrueConditionelementu , ponieważ nie filtruje elementów według ich IsControlElement właściwości.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 lub FindFirstFindAll muszą mieć zakres, a także 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 element Name, AutomationIdlub inną właściwość lub kombinację właściwości, najłatwiej jest użyć FindFirst metody . Jeśli poszukiwany element jest oknem aplikacji, punktem początkowym wyszukiwania może być RootElement.

Ten sposób znajdowania elementów automatyzacja 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 to zrobić w odpowiedzi na zdarzenie zmienione fokusem; oznacza to, że gdy aplikacja lub kontrolka odbiera fokus wejściowy, klient automatyzacja interfejsu użytkownika analizuje elementy podrzędne i być może wszystkie elementy potomne elementu ukierunkowanego.

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 metody , tworząc obiekt klasy (definiując elementy zainteresowania, przekazując Conditionelement ), lub używając jednego z następujących wstępnie zdefiniowanych obiektów, które są zdefiniowane 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 TreeWalkerelementu , użycie 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 polecenia ContentViewWalker. Następnie aplikacja otrzymuje powiadomienie, że pasek przewijania otrzymał fokus danych wejściowych. 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 pobrać najbliższy element nadrzędny, który znajduje się w widoku zawartości.

Inne sposoby pobierania elementu

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

Z zdarzenia

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

Aby uzyskać więcej informacji, zobacz Subskrybowanie zdarzeń automatyzacja 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 kontrolki ukierunkowanej

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

Zobacz też