FlaUI 是Roemer 开发的自动化框架,前身是TestStack.White,为了提供一个非常干净和现代的代码库,重新写了FlaUI以便于轻松进行协作和进一步开发。

FlaUI是一个.NET库,可帮助自动测试Windows应用程序(Win32,WinForms,WPF,Store Apps等)。它基于Microsoft的本机UI自动化库,因此是围绕它们的包装。FlaUI几乎包装了UI自动化库中的所有内容,还提供了本机对象,以防万一有人有特殊需求而FlaUI还没有解决。

在此只是进行如何使用的介绍,达到抛砖引玉的效果。

FlaUI的安装:
在Visual Studio中创建一个新项目
右键单击项目,然后选择“管理NuGet软件包”(使用NuGet软件包管理器)
选择“浏览”选项卡并搜索FlaUI,它将显示FlaUI库。
从NuGet软件包管理器安装以下库 FLAui.core,Flaui.uia2,Flaui.uia3。
当然下载的库仅限于此项目,并非对所有项目都有用。

如何使用FlaUI启动应用程序:
要开始测试,应从FlaUI.Core库中提供的“ Application”类中实现静态方法“ Launch”。
应将应用程序路径(已安装在计算机中且要自动化的应用程序)作为参数传递给Launch方法,如以下示例所示。
var application = Application.Launch(@"C:\Program\FilesMicrosoft Office\Office16\WINWORD.EXE");//这里的字符串是要进行自动化测试的软件路径,通过launch启动软件
var automation = new UIA3Automation();//指定用于自动化库类型UIA3
var mainWindow = application.GetMainWindow(automation);//应用程序实例来获取主窗口实例。
在应用程序中搜索元素:
要在应用程序中查找元素,我们需要指定AutomationElement的TreeScope。
我们可以通过ConditionFactory,ControlType和要执行的操作(如以下示例中所述)类的条件来指定AutomationElement。
ConditionFactory cf = new ConditionFactory(new UIA3PropertyLibrary());
mainWindow.FindFirstDescendant(cf.ByName("Text Editor")).AsTextBox().Enter("FlaUI Tutorial");
第一行 创建“ ConditionFactory”实例,“ ConditionFactory”是“ FlaUI.Core”中的类,“ ConditionFactory”根据条件标识元素。

第二行 指定自动化元素 TreeScope 的FindFirstDescendant(),ConditionFactory 的ByName(),ControlType 的AsTextBox()和它的动作Enter()。

上面内容可以安装FLaUI并运行指定应用程序,可以使用inspect工具或UISpy检查元素。个人觉得inspect更好用些。前面两者使用众多,可以百度相关资料,还有Flauinspect 这个工具,其效果也不错,在这里简单介绍下:

Flauinspect 有三种检查元素的方法,打开【Flauinspect】 转到 【模式】

悬停模式(按Ctrl并将鼠标指针移到目标元素上)
焦点追踪()
显示XPATH(与上面列出的任何模式结合使用),它将仅显示绝对XPath。
使用FlaUI捕获屏幕截图:
Flaui为屏幕截图提供了“ Capture”类

Capture.screen();//捕获全屏
Capture.Element("That Element ");//捕获特定元素
Capture.Rectangle("Specify the height, width and length")
//捕获在参数中指定的特征块
可以使用以下代码行将屏幕快照存储在文件中:

var image = Capture.Screen();
image.ApplyOverlays(new MouseOverlay(image.DesktopBounds));
image.ToFile(@"c:\tempscreen.png");
ToFile(“ 路径\文件名”)方法可用于将屏幕快照存储在用户指定的位置。

使用FlaUI执行鼠标动作
Flaui为Mouse类提供了以下不同方法:

1. 鼠标左键单击

Mouse.LeftClick();
//左键单击当前指向的鼠标指针。
2. 鼠标位置

Point point = new Point(2435, 234 )
//鼠标指针的位置x:2435,y:234
3. 鼠标中键

Mouse.Click(MouseButton.Middle, point);
4. MoveTo 、MoveBy 及位置

Mouse.MoveTo(point)
// 鼠标指针定位到point这个点
Mouse.MoveBy(point)
// 将鼠标拖动到指定的位置。
Mouse.Position(point)
// 鼠标指针的轨迹不会显示。
5. 滚动

Mouse.Scroll(10)
Mouse.HorizontalScroll(40);
Mouse.VerticalScroll(30);
// 正值向上滚动; 负值向下滚动
使用FlaUI执行键盘操作
为了通过键盘执行应用程序的任何操作,FlaUI为Keyboard类提供了以下方法:

Keyboard.Type("Hello Flaui"); // 键盘输入字符串
Keyboard.Type(VirtualKeyShort.Key_B, VirtualKeyShort.Key_C);
//键入B后键入C
Keyboard.Press(VirtualKeyShort.BACK) // 键入backspace键

//用于多个组合键 (按下某个键、释放某个键 )
Keyboard.Pressing(VirtualKeyShort.CONTROL);
Keyboard.Press(VirtualKeyShort.Key_A);
Keyboard.Release(VirtualKeyShort.CONTROL);

//组合键的另一种方式
Keyboard.TypeSimultaneously(VirtualKeyShort.CONTROL,VirtualKeyShort.KEY_A);
VirtualKeyShort在“ FlaUI.Core.WindowsAPI”包中。

如何在FlaUI中突出显示元素:
Flaui提供了“ DrawHighlight”方法,该方法将突出显示AutomationElement。

Automation_Element.DrawHighlight();
简单的方法示例,如想深入了解可以查看Roemer源码https://github.com/FlaUI/FlaUI。
————————————————