White的官方主页:http://teststack.github.com/White/

现在已经改成TestStack.White了,看来马上要商业化了.

UIA & UISpy

White是基于微软的UIA(UI automation)这套东西写出来的,而微软的UIA这套东西,是ms accessibility的一个附属产品,包含在.net framework 3.0里面。在.net framework 3.0里面,有一个不得不提的与UIA相关的工具UISpy,它是一个比Spy界面更友好,用来得到控件信息的一个工具,但是奇怪的是,微软在.net framework 3.5里面没有自动包含这个工具,可以自己去重新下载安装:

 

UISpy下载地址:http://www.microsoft.com/downloads/en/details.aspx?familyid=4377F86D-C913-4B5C-B87E-EF72E5B4E065&displaylang=en

 

安装之前,注意备好好如下两个注册表键值:

HKLM/SOFTWARE/Microsft/Microsoft SDKs/Windows/CurrentInstallFolder

HKLM/SOFTWARE/Microsft/Microsoft SDKs/Windows/CurrentVersion

 

(如果你目前安装的是.net 3.5,UISpy++的安装包会把上述两个键值改成v6.0,所以要记得改回来v6.0A)

 

关于UIA的一个介绍: http://msdn.microsoft.com/en-us/magazine/cc163288.aspx 

 

White的简单使用

White对于标准的.net控件,是完全支持的;而对于其他控件,可以用White中定义的CustomUIItem进行扩展。 尽管UISpy++是包含在.net 3.0中的,但是它并不能完全识别标准控件,所以最好是用LogStructure()方法来得到控件内部的信息:http://white.codeplex.com/wikipage?title=Third%20Party%20Controls&referringTitle=Home

 

下载好White后,新建一个Test Project,引用White.Core.dll,常用的名字空间大概有:

White.Core.UIItems: 包含几乎除Window类之外的其他常用控件类

White.Core.UIItems.WindowsItems: 包含Window等类

White.Core.InputDevices: 包含Keyboard、Mouse、AttachedKeyboard、AttachedMouse等类

White.Core.UIItems.Finders:包含定义搜索控件条件的类SearchCondition、SearchCritera等

White.Core.WindowsAPI: 包含特殊的按键的枚举类KeyboardInput.SpecialKeys等

using White.Core.InputDevices;  
using White.Core.UIItems.WindowItems;  
using White.Core.WindowsAPI;  
using White.Core.UIItems;  
using White.Core.UIItems.Finders;  

启动一个程序:

 

White.Core.Application app = White.Core.Application.Launch(appPath);  
//or attach to the launched application  
White.Core.Application app = White.Core.Application.Attach(appPid);  

 

得到一个标题为"Getting Started"的窗口:

Window mainWin = app.GetWindow("Getting Started");

 

类似的,得到该窗口下面的name属性为“File name:"的textbox 和name属性为"OK"的button:;

TextBox fileNameEdit = mainWin.Get<TextBox>("File name:");  
Button okBtn = mainWin.Get<Button>("OK");  

 

或者利用SearchCriteria枚举类:

TextBox fileNameEdit=(TextBox)mainWin.Get(SearchCriteria.ByText("File name:"));  
Button okBtn=(Button)mainWin.Get(SearchCriteria.ByText("OK"));  

 

键盘的输入:

White中如果要在某个控件上进行键盘或者鼠标操作,需要先attached到该控件;如果要输入组合键,需要先Hold住特殊键,然后属于一般字母键,在释放特殊键

//attach to mainWin firstly  
AttachedKeyboard keyboard = mainWin.Keyboard;  
//Press key 'a'  
keyboard.Enter("a");  
//input combination keys like: Alt + S  
//hold 'Alt' key firstly, then enter 's', release 'Alt'
//e.g. input 'Alt + S' on mainWin  
keyboard.HoldKey(KeyboardInput.SpecialKeys.ALT);  
keyboard.Enter("S");               
keyboard.LeaveKey(KeyboardInput.SpecialKeys.ALT);

 

熟悉了以上基本API,就可以写一些简单的自动化测试代码了,更多更深入的可以参考White的主页。