windows之UIAutomation查找元素

来源:互联网 发布:唐诗逸 知乎 编辑:程序博客网 时间:2024/05/17 09:05

UIAutomation查找元素

方法封装:

// 根据元素的属性查找元素public class FindElement{   /// 在规定的时间内查找一个符合条件的元素   /// <param name="aeParent">父窗口对象</param>   /// <param name="ts">范围</param>   /// <param name="cdt">条件</param>   /// <param name="nTime">时间上限</param>   static public AutomationElement FindElementByConditionInTimes(AutomationElement aeParent, TreeScope ts, Condition cdt, int nTime)   {       int nCount = nTime * 1000;       AutomationElement aeToFind = aeParent.FindFirst(ts, cdt);       while ((aeToFind == null) && (nCount > 0))       {          Thread.Sleep(1000);          nCount = nCount - 1000;          aeToFind = aeParent.FindFirst(TreeScope.Descendants, cdt);          if (aeToFind != null)          {              return aeToFind;          }       }       return aeToFind;  }  /// 通过and条件在规定时间找一个元素  /// <param name="aeParent">父窗口对象</param>  /// <param name="ts">范围</param>  /// <param name="acdt">条件</param>  /// <param name="nTime">等待时间上限值</param>  static public AutomationElement FindElementByAndConditionInTimes(AutomationElement aeParent, TreeScope ts, AndCondition acdt, int nTime)  {      int nCount = nTime * 1000;      AutomationElement aeToFind = aeParent.FindFirst(TreeScope.Descendants, acdt);      while ((aeToFind == null) && (nCount > 0))      {          Thread.Sleep(1000);          nCount = nCount - 1000;          aeToFind = aeParent.FindFirst(TreeScope.Descendants, acdt);          if (aeToFind != null)          {              return aeToFind;          }      }      return aeToFind;  }  /// 通过or条件在规定时间内查找一个元素  /// <param name="aeParent">父窗口对象</param>  /// <param name="ts">范围</param>  /// <param name="ocdt">条件</param>  /// <param name="nTime">等待时间上限值</param>  static public AutomationElement FindElementByOrConditionInTimes(AutomationElement aeParent, TreeScope ts, OrCondition ocdt, int nTime)  {      int nCount = nTime * 1000;      AutomationElement aeToFind = aeParent.FindFirst(TreeScope.Descendants, ocdt);      while ((aeToFind == null) && (nCount > 0))      {          Thread.Sleep(1000);          nCount = nCount - 1000;          aeToFind = aeParent.FindFirst(TreeScope.Descendants, ocdt);          if (aeToFind != null)          {              return aeToFind;          }       }       return aeToFind;   }}

调用:

// 获取主界面public static AutomationElement GetMainWindow(){    AutomationElement dtop = AutomationElement.RootElement;    AutomationElement mainwin = FindElement.FindElementByConditionInTimes(dtop, TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Note"), 5);     return mainwin;}// 主界面菜单按钮public static AutomationElement GetMenuBtn(AutomationElement mainwin){     AutomationElement menuBtn = FindElement.FindElementByConditionInTimes(mainwin, TreeScope.Children,new PropertyCondition(AutomationElement.HelpTextProperty, "Menu"), 5);     return menuBtn;}// 是否保存窗口弹窗public static AutomationElement GetSaveWins(AutomationElement mainwin){    var andcondition = new AndCondition(new PropertyCondition(AutomationElement.NameProperty, "保存"),     new PropertyCondition(AutomationElement.ClassNameProperty, "Window"));      AutomationElement saveWins = FindElement.FindElementByAndConditionInTimes(mainwin, TreeScope.Children, andcondition, 5);    return saveWins;}// 是否保存窗口弹窗之是按钮public static AutomationElement GetSaveWinsYesBtn(AutomationElement mainwin){    var andcondition = new AndCondition(new PropertyCondition(AutomationElement.NameProperty, "是"),new PropertyCondition(AutomationElement.ClassNameProperty, "Button"));     AutomationElement aeParent = GetObject.GetSaveWins(mainwin);     if (aeParent == null)     {         return null;     }     AutomationElement saveWinsYesBtn = FindElement.FindElementByAndConditionInTimes(aeParent, TreeScope.Children, andcondition, 5);     return saveWinsYesBtn;}
原创粉丝点击