VS 2010 测试功能学习(十一) - 如何用CUIT代码定位UI控件? (转)

发现一篇Brian Keller最近写的介绍Visual Studio 2010测试功能好的文章,放在本篇博客的开头与大家共享:

 

A different way of presenting the Visual Studio 2010 testing tools


      前几篇博客中关于Coded UI Test(以下简称为CUIT)的介绍啰啰嗦嗦地也写了不少了,但也是都是些概念性的东东,并触及到CUIT的核心Code,也就是如何用Code来真正实现对程序UI的的控制。从本篇博客开始,我就简单介绍一下如何使用代码来控制UI上元素。下图是我在前两天给同事所做的CUIT UI测试功能介绍中的一页PPT,图的左半边是我总结的UI测试的一个简单步骤模型,右半边则是CUIT所提供的对应功能。

      这左半边的5步是进行UI自动化测试所必须的步骤,同时也是任何测试所共有,不仅限于UI测试。看似简单,但实际上蕴藏很多的内容,其中有一点常被测试人员所忽略的地方就是,用它来衡量被测试软件(Application Under Test, AUT)的可测试性(Testability)。在项目开始阶段,测试人员在评审PM和开发人员的文档时,往往总是从要实现系统的功能是否正确和完善的角度开始,急于去了解要测试内容的具体情况,忙着着手准备开始写测试计划。而没有人愿意去考虑一下仔细思考一下:AUT是否好测试?稍改进一下是否更有利于实现自动化测试?

      编写CUIT测试代码的第一步就是要能够找到所要操作的UI控件,然后创建对应的测试对象。要定位到指定的UI控件并创建测试对象,需要知道该空间的类型、父控件对象以及它的搜索属性。例如,Visual Studio 2010中新加入了一新的工具窗口Architecture Explorer,用于浏览程序的结构层次,其中包含了一个个的Column窗口,如下图所示:

下面的CUIT代码就封装了对这个Column控件测试类:

  1. public class VSAEColumn : WpfCustom   
  2. {   
  3.     #region Constructors   
  4.         
  5.     /// <summary>   
  6.     ///    
  7.     /// </summary>   
  8.     /// <param name="searchLimitContainer"></param>   
  9.     /// <param name="index">Column index</param>   
  10.     public VSAEColumn(VSArchitectureExplorer architectureExplorer, int index) :   
  11.     base(architectureExplorer.CascadeScrollViewPane)   
  12.     {   
  13.         this.architectureExplorer = architectureExplorer;   
  14.             
  15.         #region Search Criteria   
  16.         this.SearchProperties[WpfCustom.PropertyNames.ClassName] = "Uia.CascadeColumn";   
  17.         this.SearchProperties[WpfCustom.PropertyNames.AutomationId] = String.Format("Column_{0}", index);   
  18.         #endregion    
  19.     }   
  20.        
  21.     #endregion   
  22.         
  23.     …   
  24. }  

 

上面的代码有三处需要特别注意,它们共同工作完成了对UI测试对象的创建:

  1. 父类WpfCustom:是CUIT框架提供的一个类,它所对应的UI元素是WPF Custom类型的控件。
  2. architectureExplorer.CascadeScrollViewPane:它是Column控件的父控件所对应的测试对象,它限定了对Column控件的搜索访问,即就在该父控件的子控件中进行搜索。
  3. Search Criteria中定义的两条搜索标准:AutomationId和ClassName。

      看了上述这三点,你肯定要问如何才能知道我所要的UI控件的类型、父和搜索标准呢? VS 2010中提供了Coded UI Test Builder工具来辅助你获得这些信息。如下图所示, 这是用CUIT Builder抓取的Column控件的信息,涵盖了上述的三方面内容。

       Coded UI Test Builder对应的可执行文件CodedUITestBuilder.exe在放在 ...\Program Files\Microsoft Visual Studio 10.0\Common7\IDE目录下,但很可惜,对于VS 2010版本它依赖CUIT工程不能独立执行,只能是先创建一个Coded UI Test工程,然后打开测试代码文件,鼠标右键点击任何一个[TestMethod]方法,弹出菜单中选择“Generate Code for Coded UI Test”-> "Use Coded UI Test Builder"。

      有朋友问起过,如何使用CUIT进行本地化产品的测试。其实,CUIT本身的功能是支持用户进行基于UI的功能测试,本地化测试的支持应该是另外的技术来辅助的。比如说,对于基于.NET Framework的managed应用,就可以使用.NET自带的资源访问机制在代码中来进行本地化资源的访问,这里是指ResourceManager类以及.NET平台的对资源内容分发和部署机制

posted @ 2011-01-13 23:53  董雨  阅读(488)  评论(0编辑  收藏  举报