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里面没有自动包含这个工具,可以自己去重新下载安装:
安装之前,注意备好好如下两个注册表键值:
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的主页。