WPF 使用 FlaUI3 实现 UI 自动化测试,并解决 System.IO.FileNotFoundException: Could not load file or assembly 'Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXX'.
参考
- deepseek
- 豆包
- https://github.com/FlaUI/FlaUI
- https://www.cnblogs.com/mq0036/p/18252000
- https://blog.csdn.net/mzl87/article/details/146131382
- https://www.cnblogs.com/lhxsoft/p/15152197.html
环境
| 软件/系统 | 版本 | 说明 | 
|---|---|---|
| Windows | windows 10 专业版 22H2 64 位操作系统, 基于 x64 的处理器 | |
| Microsoft Visual Studio | Community 2022 (64 位) - Current 版本 17.14.9 | |
| .NET | 6 | |
| FlaUI.UIA3 | 5.0.0 | nuget依赖库 | 
解决 System.IO.FileNotFoundException: Could not load file or assembly 'Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXX'.
这个问题应该是 .NET6+ 支持跨平台问题导致的,所以运行 FlaUI 需要在 .NET6+ 上面指定运行的平台为 Windows
- 解决方案资源管理器->对应项目->右键->属性
  
- 应用程序->常规->目标OS设置为- Windows。(目标操作系统版本是在选择- 目标OS后自动带出的配置)
  
正文
FlaUI 是一个 .NET 库,有助于对 Windows 应用程序(Win32、WinForms、WPF、Store Apps 等)进行自动化 UI 测试。
安装 FlaUI.UIA3 即可,对应版本的 FlaUI.Core 会自动安装。
代码
using FlaUI.Core;
using FlaUI.Core.AutomationElements;
using FlaUI.Core.Definitions;
using FlaUI.Core.Input;
using FlaUI.Core.Tools;
using FlaUI.UIA3;
using System.Diagnostics;
namespace UITest
{
    [TestClass]
    public sealed class Test1
    {
        [TestMethod]
        public void TestMethod1()
        {
            // 启动应用程序
			var app = Application.Launch(Path.Combine(Environment.CurrentDirectory,
			"..", "..", "..", "..",
			"WPFNetConnect", "bin", "Debug", "net6.0-windows", "WPFNetConnect.exe"));
            // 使用 UIA3 自动化模式
            using (var automation = new UIA3Automation())
            {
                // 获取主窗口
                var mainWindow = app.GetMainWindow(automation);
                if (mainWindow == null)
                {
                    Assert.Fail("主窗口未找到");
                }
                // 定位账号输入框
                var accountTextBox = mainWindow.FindFirstDescendant(cf =>
                    //cf
                    cf.ByControlType(ControlType.Edit).And(cf.ByAutomationId("LoginAccountTextBox"))
                )?.AsTextBox();
                if (accountTextBox == null)
                {
                    Assert.Fail("账号输入框未找到");
                }
                accountTextBox.Enter("admin");
                // 定位密码框(使用自动化ID)
                var passwordBox = mainWindow.FindFirstDescendant(cf =>
                    cf.ByAutomationId("LoginPasswordBox")
                );
                if (passwordBox == null)
                {
                    Assert.Fail("密码框未找到");
                }
                passwordBox.Focus();
                Keyboard.Type("123456");
                // 定位登录按钮(通过按钮文本)
                var loginButton = mainWindow.FindFirstDescendant(cf =>
                    cf.ByControlType(ControlType.Button).And(
                    cf.ByName("登录"))
                )?.AsButton();
                if (loginButton == null)
                {
                    Assert.Fail("登录按钮未找到");
                }
                loginButton.Invoke();
            }
            app.Close();
        }
    }
}
结果

 TestMethod1
   源: Test1.cs 行 15
   持续时间: 1.1 秒
    博  主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/p/18989417
 
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
    
地 址 :https://www.cnblogs.com/xiaqiuchu/p/18989417
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号