Flaui 是一個基于微軟 UIAutomation 技術的 .NET 庫,主要用于對 Windows 應用程序(如 Win32、WinForms、wpf 等)進行自動化 UI 測試。它提供了強大的元素查找和交互功能,支持多種框架,并且易于使用和定制。內部采用異步調用以提高效率,社區也非常活躍。
安裝
- 確保已安裝 .NET 環境:FlaUI 需要 .NET 支持。
- 添加 NuGet 包:在 visual studio 中右擊解決方案,選擇“管理 NuGet 包”,搜索并安裝 FlaUI.Core、FlaUI.UIA2 和 FlaUI.UIA3。
獲取窗體
-
獲取主窗體
-
獲取子窗體
var processes = System.Diagnostics.Process.GetProcessesByName("notepad"); var id = processes.First().Id; var app = FlaUI.Core.Application.Attach(id); var mainWindow = app.GetMainWindow(automation); var childWindow = FindWindowByAllChildren(mainWindow, "子窗體標題");
-
獲取所有頂級窗體
var processes = System.Diagnostics.Process.GetProcessesByName("notepad"); var id = processes.First().Id; var app = FlaUI.Core.Application.Attach(id); var windows = app.GetAllTopLevelWindows(automation).ToList(); var mainWindow = FindWindowByAllTopLevelWindows(windows, "主窗體標題");
-
獲取桌面上的所有窗體 獲取元素推薦使用 XPath 獲取元素,類似于網頁中的 XPath,可以方便地定位界面中的任意元素。例如,//Document[@Name=”文本編輯器”] 可以定位到記事本中的文本編輯區域。
元素操作
-
點擊操作
var button = mainWindow.FindFirstDescendant(cf => cf.ByText("按鈕文本")).AsButton(); button.Click();
-
輸入文本
var textBox = mainWindow.FindFirstDescendant(cf => cf.ByAutomationId("文本框AutomationId")).AsTextBox(); textBox.Enter("輸入的文本");
-
調用方法
var menu = mainWindow.FindFirstDescendant(cf => cf.ByText("菜單文本")).AsMenu(); menu.Invoke();
-
鍵盤操作
Keyboard.Type("Hello FlaUI"); // 輸入字符串 Keyboard.Press(VirtualKeyShort.BACK); // 按下 Backspace 鍵 Keyboard.Pressing(VirtualKeyShort.CONTROL); // 按下 Ctrl 鍵 Keyboard.Press(VirtualKeyShort.Key_A); // 按下 A 鍵 Keyboard.Release(VirtualKeyShort.CONTROL); // 釋放 Ctrl 鍵 Keyboard.TypeSimultaneously(VirtualKeyShort.CONTROL, VirtualKeyShort.KEY_A); // 同時按下 Ctrl 和 A 鍵
-
鼠標操作
Mouse.Click(button); // 點擊按鈕 Mouse.HorizontalScroll(40); // 水平滾動 40 個單位 Mouse.VerticalScroll(30); // 垂直滾動 30 個單位
示例 打開記事本并輸入文本
// See https://aka.ms/new-console-template for more information using FlaUI.Core; using FlaUI.Core.AutomationElements; using FlaUI.UIA3; Console.WriteLine("Hello, World!"); var app = Application.Launch("notepad.exe"); using (var automation = new UIA3Automation()) { var window = app.GetMainWindow(automation); var textBox = window.FindFirstDescendant(cf => cf.ByAutomationId("15")).AsTextBox(); textBox.Enter("Hello FlaUI"); } app.Close();