首页 > 系统相关 >FlaUI:.NET 自动化测试 Windows 应用的强大工具

FlaUI:.NET 自动化测试 Windows 应用的强大工具

时间:2025-01-23 11:23:51浏览次数:1  
标签:FlaUI Windows app cf 窗体 var NET mainWindow

FlaUI 是一个基于微软 UIAutomation 技术的 .NET 库,主要用于对 Windows 应用程序(如 Win32、WinForms、WPF 等)进行自动化 UI 测试。它提供了强大的元素查找和交互功能,支持多种框架,并且易于使用和定制。内部采用异步调用以提高效率,社区也非常活跃。

安装

  1. 确保已安装 .NET 环境:FlaUI 需要 .NET 支持。
  2. 添加 NuGet 包:在 Visual Studio 中右击解决方案,选择“管理 NuGet 包”,搜索并安装 FlaUI.CoreFlaUI.UIA2FlaUI.UIA3

获取窗体

1. 获取主窗体

var app = Application.Launch("notepad.exe");
using (var automation = new UIA3Automation())
{
    var mainWindow = app.GetMainWindow(automation);
}

2. 获取子窗体

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, "子窗体标题");

3. 获取所有顶级窗体

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, "主窗体标题");

4. 获取桌面上的所有窗体

获取元素

推荐使用 XPath 获取元素,类似于网页中的 XPath,可以方便地定位界面中的任意元素。例如,//Document[@Name="文本编辑器"] 可以定位到记事本中的文本编辑区域。

元素操作

1. 点击操作

var button = mainWindow.FindFirstDescendant(cf => cf.ByText("按钮文本")).AsButton();
button.Click();

2. 输入文本

var textBox = mainWindow.FindFirstDescendant(cf => cf.ByAutomationId("文本框AutomationId")).AsTextBox();
textBox.Enter("输入的文本");

3. 调用方法

var menu = mainWindow.FindFirstDescendant(cf => cf.ByText("菜单文本")).AsMenu();
menu.Invoke();

4. 键盘操作

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 键

5. 鼠标操作

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();

标签:FlaUI,Windows,app,cf,窗体,var,NET,mainWindow
From: https://www.cnblogs.com/netcore5/p/18687380

相关文章

  • ASP.NET Core 中基于 Cookie 的身份鉴权实现步骤
    在ASP.NETCore应用中,基于Cookie的身份鉴权是一种常见的身份验证方式,特别适用于传统的Web应用程序。Cookie能够在用户的浏览器中存储身份验证数据,从而在用户访问应用的不同页面时保持登录状态。一、配置Cookie身份验证首先,在Startup.cs或Program.cs文件中配置Cook......
  • ASP.NET Core 使用响应压缩中间件提高程序性能
    20250104_ASP.NETCore使用响应压缩中间件提高程序性能ASP.NETCore中的响应压缩中间件1.什么是响应压缩中间件响应压缩中间件是ASP.NETCore的一部分,它通过应用支持的压缩算法(如Gzip和Brotli)来减小服务器发送到客户端的响应体积。这有助于加速数据传输,尤其适用于大段文本和......
  • ASP.NET Core 中的超时中间件
    ASP.NETCore中的超时中间件在ASP.NETCore中,超时中间件允许为HTTP请求设置超时限制,以提高应用程序的健壮性和响应能力。1.添加超时中间件到应用需要在的服务集合中添加请求超时中间件,再将其添加到请求处理管道中。usingMicrosoft.AspNetCore.Http.Timeouts;varbuilder......
  • ASP.NET Core 快速轻量级的浏览器检测和设备检测库
    在.NETFramework4.7中那样,通过HttpContext.Request的Browser属性轻松获取发起HTTP请求的浏览器信息,ASP.NETCore并未直接提供这一功能,现在有了BrowserDetector这个强大的NuGet包,你可以在ASP.NETCore应用中轻松实现浏览器、设备类型以及操作系统的检测。Browser......
  • .NET开源强大的高级日期和时间库
    NodaTime是一个为.NET设计的开源高级日期和时间库,提供了比.NET框架自带的DateTime和DateTimeOffset更加丰富和可靠的日期时间操作功能。1.安装NodaTime首先,通过NuGet安装NodaTime包:Install-PackageNodaTime2.基本概念NodaTime提供了多种日期和时间类型,主......
  • 【亲测可用】Windows激活神器HEU KMS Activator v42.3.3
    软件介绍HEUKMSActivator,简洁高效的全能KMS/OEM激活工具,适用所有Windows,Office版本,无需联网即可一键激活,支持UEFI的KMS激活工具。KMS服务是微软对Windows,Office等产品的批量许可服务,利用KMS可以激活局域网内的产品。该工具利用KMS机制在系统搭建KMS服务器,从而实现在线或离......
  • .Net类型 引用类型
    预定义类型引用类型C#支持两种预定义的引用类型:object和string名称.NET类型说明objectSystem.Object根类型,其他类型都是从它派生而来的(包括值类型)stringSystem.StringUnicode字符串 1.object类型许多编程语言和层次结构都提供了根类型,层次结构中......
  • dotnet 使用 ColorCode 做代码着色器
    本文记录我使用ColorCode开源库简单做一个代码着色器开源库地址:https://github.com/CommunityToolkit/ColorCode-Universal我用的是ColorCode.Core版本,这个版本是无具体UI框架依赖的,于是我就在此基础上,同时做了WPF和Avalonia框架的版本。这两个框架在对ColorCode的......
  • 回调函数 事件处理 dotnet .net 有界队列 背压机制(Backpressure)有界队列
    回调函数事件处理dotnet.net有界队列背压机制(Backpressure)有界队列通过有界队列来实现背压,确保生产者不会以超过消费者处理能力的速度发送数据。usingSystem.Threading.Channels;publicclassProgram{staticasyncTaskMain(string[]args){//创......
  • 回调函数 事件处理 dotnet .net 消费处理系统 生产者-消费者类型
    回调函数dotnet.net消费处理系统生产者-消费者类型一个简单的消息处理系统,它使用了.NET的System.Threading.Channels命名空间来创建一个无界的通道(channel),用于在不同的任务之间传递MessageWrapper对象。无界限的消息队列(UnboundedChannel)是.NET中System.Threading.Channel......