備註
本文件適用對象為 .NET Framework 開發人員,其想要使用 System.Windows.Automation 命名空間中定義的受控 UI 自動化類別。 欲了解最新的 UI 自動化資訊,請參閱 Windows 自動化 API:UI 自動化。
本主題說明取得使用者介面(UI)元素物件的各種方式 AutomationElement 。
謹慎
如果貴客戶端應用程式可能會嘗試在其自身的使用者介面中尋找元素,您必須在獨立的執行緒中進行所有使用者介面自動化的呼叫。 如需詳細資訊,請參閱 UI自動化線程問題。
根元素
所有尋找 AutomationElement 物件的行動都必須有起點。 這可以是任何元素,包括桌面、應用程式視窗或控制項。
桌面的根元素(所有元素的衍生來源)是從靜態 AutomationElement.RootElement 屬性取得的。
謹慎
一般來說,你應該盡量只取得 的直系子孫 RootElement。 尋找後代可能會遍歷數百甚至數千個元素,可能導致堆疊溢位。 如果你想在較低層級取得特定元素,應該從申請視窗或較低層級的容器開始搜尋。
條件
對於大多數你能用來取得 UI 自動化元素的技術,你必須指定一個 Condition,這是一組定義你想要取得哪些元素的標準。
最簡單的條件是 TrueCondition,一個預先定義的物件,指定搜尋範圍內的所有元素都必須回傳。 FalseCondition的反面 TrueCondition則較不實用,因為它會阻止找到任何元素。
另外三個預設條件可單獨使用或與其他條件結合使用: ContentViewCondition、 ControlViewCondition、及 RawViewCondition。 RawViewCondition單獨使用時,相當於TrueCondition,因為它不會依據元素的IsControlElement屬性或IsContentElement屬性來進行過濾。
其他條件則由一個或多個 PropertyCondition 物件累積而成,每個物件指定一個屬性值。 例如,a PropertyCondition 可能指定該元素已啟用,或支援某種控制模式。
條件可利用布林邏輯組合,透過構造類型為 AndCondition、 OrCondition、 NotCondition的物件。
搜尋範圍
使用FindFirst或FindAll進行的搜尋必須具備範圍和起點。
範圍定義了起始點周圍的空間,該空間將被搜尋。 這可能包括元素本身、其兄弟姊妹、父母、祖先、直系子孫及後代。
搜尋範圍由列舉中數值 TreeScope 的位元組合定義。
尋找已知元素
要找到已知元素,該元素由其 Name、 AutomationId、 或其他性質或性質組合所識別,使用此方法最 FindFirst 為簡單。 若尋找的元素是應用視窗,搜尋的起點可以是 RootElement。
這種尋找 UI 自動化元素的方式在自動化測試場景中最為有用。
在子樹中尋找元素
要找到所有符合特定條件且與已知元素相關的元素,可以使用 FindAll。 例如,你可以使用此方法從清單或選單中檢索清單項目或選單項目,或識別對話框中的所有控制項。
行走子樹
如果你對客戶可能使用的應用程式沒有先驗知識,你可以利用這個 TreeWalker 類別來建立所有感興趣元素的子樹。 你的應用程式可能會在焦點變更事件發生時這麼做,也就是說,當一個應用程式或控制項接收到輸入焦點時,UI 自動化用戶端會檢查其子節點,甚至可能檢查該焦點元素的所有的後代元素。
另一種 TreeWalker 方法是辨識元素的祖先。 例如,透過往樹上走,你可以辨識控制項的父視窗。
你可以透過建立類別中的物件(藉由傳遞TreeWalker來定義感興趣的元素),或者使用以下作為Condition欄位預先定義的物件之一來使用TreeWalker。
| 領域 | 說明 |
|---|---|
| ContentViewWalker | 只找到性質為 IsContentElementtrue的元素。 |
| ControlViewWalker | 只找到性質為 IsControlElementtrue的元素。 |
| RawViewWalker | 此功能找出所有元素。 |
當你取得 TreeWalker,使用它就變得簡單了。 只要呼叫 Get 方法來在子樹的元素間導航即可。
此 Normalize 方法可用於從不屬於視圖的另一個元素導航到子樹中的元素。 例如,假設你透過使用 ContentViewWalker建立了一個子樹的視圖。 接著應用程式會收到通知,表示滾動條已獲得輸入焦點。 因為捲軸不是內容元素,所以它不會出現在子樹的視圖中。 不過,你可以將代表滾動條的 AutomationElement 傳遞給 Normalize,以檢索出位於內容檢視中的最近祖先。
其他取回元素的方法
除了搜尋和導航外,你還可以透過以下方式取得一個AutomationElement 。
來自一個事件
當你的應用程式收到 UI 自動化事件時,傳給事件處理器的來源物件是一個 AutomationElement。 例如,如果你訂閱了焦點變更事件,傳給你的 AutomationFocusChangedEventHandler 來源就是接收焦點的元素。
欲了解更多資訊,請參閱 訂閱 UI 自動化活動。
從一個點出發
如果你有螢幕座標(例如游標位置),可以使用靜態AutomationElement方法來取得FromPoint。
從視窗句柄取得
要從 HWND 取得AutomationElement,請使用靜態FromHandle方法。
來自聚焦控制
你可以從靜態 AutomationElement 屬性中擷取代表已聚焦控制項的 FocusedElement。