Automatiseringselementen voor de gebruikersinterface verkrijgen
Notitie
Deze documentatie is bedoeld voor .NET Framework-ontwikkelaars die de beheerde UI Automation-klassen willen gebruiken die zijn gedefinieerd in de System.Windows.Automation naamruimte. Zie Windows Automation-API: UI Automation voor de meest recente informatie over UI Automation.
In dit onderwerp worden de verschillende manieren beschreven voor het verkrijgen AutomationElement van objecten voor gebruikersinterface-elementen (UI).
Let op
Als uw clienttoepassing mogelijk probeert elementen in een eigen gebruikersinterface te vinden, moet u alle UI Automation-aanroepen uitvoeren op een afzonderlijke thread. Zie Problemen met ui-automatiseringsthreading voor meer informatie.
Hoofdelement
Alle zoekopdrachten naar AutomationElement objecten moeten een beginlocatie hebben. Dit kan elk element zijn, waaronder het bureaublad, een toepassingsvenster of een besturingselement.
Het hoofdelement voor het bureaublad, waaruit alle elementen afstammen, wordt verkregen uit de statische AutomationElement.RootElement eigenschap.
Let op
Over het algemeen moet u proberen alleen directe kinderen van de RootElement. Een zoekopdracht naar afstammelingen kan honderden of zelfs duizenden elementen herhalen, wat mogelijk resulteert in een stack-overloop. Als u een specifiek element op een lager niveau probeert te verkrijgen, moet u uw zoekopdracht starten vanuit het toepassingsvenster of vanuit een container op een lager niveau.
Voorwaarden
Voor de meeste technieken die u kunt gebruiken om UI Automation-elementen op te halen, moet u een Condition, een set criteria opgeven die bepalen welke elementen u wilt ophalen.
De eenvoudigste voorwaarde is TrueCondition, een vooraf gedefinieerd object dat aangeeft dat alle elementen binnen het zoekbereik moeten worden geretourneerd. FalseCondition, het omgekeerde van TrueCondition, is minder nuttig, omdat het zou voorkomen dat elementen worden gevonden.
Drie andere vooraf gedefinieerde voorwaarden kunnen alleen of in combinatie met andere voorwaarden worden gebruikt: ContentViewCondition, ControlViewConditionen RawViewCondition. RawViewCondition, gebruikt door zichzelf, is gelijk aan TrueCondition, omdat het elementen niet filtert op hun IsControlElement of IsContentElement eigenschappen.
Andere voorwaarden worden opgebouwd uit een of meer PropertyCondition objecten, die elk een eigenschapswaarde specificeert. Een kan bijvoorbeeld PropertyCondition opgeven dat het element is ingeschakeld of dat het een bepaald besturingspatroon ondersteunt.
Voorwaarden kunnen worden gecombineerd met booleaanse logica door objecten van typen AndConditionen OrConditionNotCondition.
Zoekbereik
Zoekopdrachten die worden uitgevoerd met behulp van FindFirst of FindAll moeten een bereik en een beginlocatie hebben.
Het bereik definieert de ruimte rond de beginlocatie die moet worden doorzocht. Dit kan het element zelf, zijn broers en zussen, zijn ouders, zijn voorouders, zijn directe kinderen en zijn nakomelingen omvatten.
Het bereik van een zoekopdracht wordt gedefinieerd door een bitwise combinatie van waarden uit de TreeScope opsomming.
Een bekend element zoeken
Als u een bekend element wilt vinden, geïdentificeerd door Namede eigenschap, AutomationIdof een andere eigenschap of combinatie van eigenschappen, kunt u de methode het FindFirst eenvoudigst gebruiken. Als het gezochte element een toepassingsvenster is, kan het beginpunt van de zoekopdracht het RootElement.
Deze manier om UI Automation-elementen te vinden, is het handigst in geautomatiseerde testscenario's.
Elementen zoeken in een substructuur
Als u alle elementen wilt vinden die voldoen aan specifieke criteria die zijn gerelateerd aan een bekend element, kunt u gebruiken FindAll. U kunt deze methode bijvoorbeeld gebruiken om lijstitems of menu-items op te halen uit een lijst of menu of om alle besturingselementen in een dialoogvenster te identificeren.
Een substructuur lopen
Als u geen kennis hebt van de toepassingen waarmee uw client kan worden gebruikt, kunt u een substructuur maken van alle interessante elementen met behulp van de TreeWalker klasse. Uw toepassing kan dit doen als reactie op een gebeurtenis die de focus heeft gewijzigd; Dat wil gezegd dat wanneer een toepassing of besturingselement invoerfocus ontvangt, de UI Automation-client onderliggende elementen en misschien alle onderliggende elementen van het focuselement onderzoekt.
Een andere manier waarop TreeWalker kan worden gebruikt, is het identificeren van de voorouders van een element. Door bijvoorbeeld de boomstructuur te doorlopen, kunt u het bovenliggende venster van een besturingselement identificeren.
U kunt TreeWalker een object van de klasse maken (de gewenste elementen definiëren door een Condition) of door een van de volgende vooraf gedefinieerde objecten te gebruiken die zijn gedefinieerd als velden van TreeWalker.
Veld | Beschrijving |
---|---|
ContentViewWalker | Hiermee worden alleen elementen gevonden waarvan IsContentElement de eigenschap is true . |
ControlViewWalker | Hiermee worden alleen elementen gevonden waarvan IsControlElement de eigenschap is true . |
RawViewWalker | Hiermee vindt u alle elementen. |
Nadat u een TreeWalker, met behulp van het is eenvoudig. Roep gewoon de Get
methoden aan om te navigeren tussen elementen van de substructuur.
De Normalize methode kan worden gebruikt voor het navigeren naar een element in de substructuur van een ander element dat geen deel uitmaakt van de weergave. Stel dat u een weergave van een substructuur hebt gemaakt met behulp van ContentViewWalker. Uw toepassing ontvangt vervolgens een melding dat een schuifbalk de invoerfocus heeft ontvangen. Omdat een schuifbalk geen inhoudselement is, is deze niet aanwezig in uw weergave van de substructuur. U kunt de AutomationElement schuifbalk echter doorgeven aan Normalize en de dichtstbijzijnde bovenliggende bovenliggend element ophalen in de inhoudsweergave.
Andere manieren om een element op te halen
Naast zoekopdrachten en navigatie kunt u een AutomationElement op de volgende manieren ophalen.
Van een gebeurtenis
Wanneer uw toepassing een UI Automation-gebeurtenis ontvangt, is het bronobject dat is doorgegeven aan uw gebeurtenis-handler een AutomationElement. Als u zich bijvoorbeeld hebt geabonneerd op gebeurtenissen die de focus hebben gewijzigd, is de bron die aan u AutomationFocusChangedEventHandler is doorgegeven het element dat de focus heeft ontvangen.
Zie Abonneren op UI Automation-gebeurtenissen voor meer informatie.
Vanaf een punt
Als u schermcoördinaten hebt (bijvoorbeeld een cursorpositie), kunt u een AutomationElement ophalen met behulp van de statische FromPoint methode.
Vanuit een venstergreep
Als u een AutomationElement van een HWND wilt ophalen, gebruikt u de statische FromHandle methode.
Vanuit het besturingselement Prioriteit
U kunt een AutomationElement besturingselement met prioriteit ophalen uit de statische FocusedElement eigenschap.