Root Element
系统的root element就是windows的桌面,其他所有控件都是桌面的子控件。在自动化程序中查找控件,需要从一个父控件开始,这个父控件可以是任何控件,桌面是所有控件的父控件。我们可以通过下面的方法获取这个root element。
var desktop=AutomationElement.RootElement;
Condition
在UIA中我们通过condition来查找元素,condition定义了查找元素的方式(属性)。
UIA中有两个预定义condition:trueCondition和falseConditon。TrueCondition会返回指定搜索范围内的所有元素;相反,FalseCondition会防止搜索范围内任何元素被找到。
除此之外,还有三个预定义的condition:ContentViewCondition,ControlViewCondition, 和RawViewCondition,它们可以单独使用也可以以组合条件的方式使用。
我们也可以通过property构建特定属性的propertyCondition,比如可以构建支持某种control pattern的condition。我们也可以通过AndCondition, OrCondition, 和NotCondition来构建组合类型的condition.
var condition=new PropertyCondition(AutomationElement.NameProperty,"test")
var btnCondition=new AndCondition(
newPropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button),
newPropertyCondition(AutomationElement.NameProperty,"ok"));
Search Scope
我们可以通过findfirst和findall两个函数来定位控件,这两个函数的入参包括查找的范围和查找条件。Findfirst会返回满足当前元素所在查找范围内符合条件的第一个元素,Findall会返回满足当前元素查找范围内符合条件的所有元素。search scope可以是以下多种查找范围的组合:Ancestors、Children、Descendants、Element、Parent和Subtree。
var window=desktop.FindFirst(TreeScope.Children, condition);
AutomationElementCollection elementCollection =
elementWindowElement.FindAll(TreeScope.Children, conditions);