Dela via


Hämta automationselement för användargränssnittet

Kommentar

Den här dokumentationen System.Windows.Automation är avsedd för .NET Framework-utvecklare som vill använda de hanterade UI Automation-klasserna som definierats i namnområdet. Den senaste informationen om UI Automation finns i Windows Automation API: UI Automation.

Det här avsnittet beskriver de olika sätten att AutomationElement hämta objekt för användargränssnittselement .

Varning

Om klientprogrammet kan försöka hitta element i sitt eget användargränssnitt måste du göra alla UI Automation-anrop i en separat tråd. Mer information finns i UI Automation Threading Issues (UI Automation Threading Issues).

Rotelementet

Alla sökningar efter AutomationElement objekt måste ha en startplats. Detta kan vara valfritt element, inklusive skrivbordet, ett programfönster eller en kontroll.

Rotelementet för skrivbordet, från vilket alla element är fallande, hämtas från den statiska AutomationElement.RootElement egenskapen.

Varning

I allmänhet bör du försöka få endast direkta underordnade RootElementtill . En sökning efter underordnade kan iterera genom hundratals eller till och med tusentals element, vilket kan resultera i ett stackspill. Om du försöker hämta ett visst element på en lägre nivå bör du starta sökningen från programfönstret eller från en container på en lägre nivå.

Villkor

För de flesta tekniker som du kan använda för att hämta UI Automation-element måste du ange en Condition, som är en uppsättning kriterier som definierar vilka element du vill hämta.

Det enklaste villkoret är TrueCondition, ett fördefinierat objekt som anger att alla element i sökomfånget ska returneras. FalseCondition, converse för TrueCondition, är mindre användbart eftersom det skulle förhindra att element hittas.

Tre andra fördefinierade villkor kan användas ensamt eller i kombination med andra villkor: ContentViewCondition, ControlViewConditionoch RawViewCondition. RawViewCondition, som används av sig själv, motsvarar TrueCondition, eftersom det inte filtrerar element efter deras IsControlElement eller IsContentElement egenskaper.

Andra villkor byggs upp från ett eller flera PropertyCondition objekt, som var och en anger ett egenskapsvärde. En kan till exempel PropertyCondition ange att elementet är aktiverat eller att det stöder ett visst kontrollmönster.

Villkor kan kombineras med boolesk logik genom att konstruera objekt av typerna AndCondition, OrConditionoch NotCondition.

Sökomfång

Sökningar som görs med hjälp FindFirst av eller FindAll måste ha ett omfång samt en startplats.

Omfånget definierar utrymmet runt startplatsen som ska genomsökas. Detta kan omfatta själva elementet, dess syskon, dess överordnade, dess förfäder, dess omedelbara barn och dess ättlingar.

Sökomfånget definieras av en bitvis kombination av värden från TreeScope uppräkningen.

Hitta ett känt element

Om du vill hitta ett känt element, som identifieras av dess Name, AutomationIdeller någon annan egenskap eller kombination av egenskaper, är det enklast att använda FindFirst metoden. Om elementet som söks är ett programfönster kan startpunkten för sökningen RootElementvara .

Det här sättet att hitta automationselement i användargränssnittet är mest användbart i automatiserade testscenarier.

Hitta element i ett underträd

Om du vill hitta alla element som uppfyller specifika kriterier som är relaterade till ett känt element kan du använda FindAll. Du kan till exempel använda den här metoden för att hämta listobjekt eller menyobjekt från en lista eller meny, eller för att identifiera alla kontroller i en dialogruta.

Gå en underträd

Om du inte har några förkunskaper om de program som klienten kan användas med kan du skapa ett underträd av alla intressanta element med hjälp TreeWalker av klassen. Ditt program kan göra detta som svar på en händelse som ändrats i fokus. När ett program eller en kontroll tar emot indatafokus undersöker UI Automation-klienten underordnade och kanske alla underordnade till det fokuserade elementet.

Ett annat sätt att TreeWalker använda är att identifiera överordnade element. Genom att till exempel gå upp i trädet kan du identifiera det överordnade fönstret för en kontroll.

Du kan använda TreeWalker antingen genom att skapa ett objekt i klassen (definiera element av intresse genom att skicka ett Condition), eller genom att använda något av följande fördefinierade objekt som definieras som fält i TreeWalker.

Fält beskrivning
ContentViewWalker Hittar endast element vars IsContentElement egenskap är true.
ControlViewWalker Hittar endast element vars IsControlElement egenskap är true.
RawViewWalker Hittar alla element.

När du har fått en TreeWalkerär det enkelt att använda den. Anropa Get bara metoderna för att navigera bland elementen i underträdet.

Metoden Normalize kan användas för att navigera till ett element i underträdet från ett annat element som inte ingår i vyn. Anta till exempel att du har skapat en vy över ett underträd med hjälp ContentViewWalkerav . Programmet får sedan ett meddelande om att en rullningslist har fått indatafokuset. Eftersom en rullningslist inte är ett innehållselement finns den inte i din vy över underträdet. Du kan dock skicka AutomationElement den som representerar rullningslisten till Normalize och hämta närmaste överordnade som finns i innehållsvyn.

Andra sätt att hämta ett element

Förutom sökningar och navigering kan du hämta en AutomationElement på följande sätt.

Från en händelse

När ditt program tar emot en UI Automation-händelse är källobjektet som skickas till händelsehanteraren en AutomationElement. Om du till exempel har prenumererat på händelser som ändrats i fokus är källan som skickades till ditt AutomationFocusChangedEventHandler element det element som fick fokus.

Mer information finns i Prenumerera på UI Automation-händelser.

Från en punkt

Om du har skärmkoordinater (till exempel en markörposition) kan du hämta en AutomationElement med hjälp av den statiska FromPoint metoden.

Från ett fönsterhandtag

Om du vill hämta en AutomationElement från en HWND använder du den statiska FromHandle metoden.

Från den fokuserade kontrollen

Du kan hämta en AutomationElement som representerar den fokuserade kontrollen från den statiska FocusedElement egenskapen.

Se även