检测当前是否打开了目录

本文关键字:是否 检测 | 更新日期: 2023-09-27 18:35:34

对于UI黑盒测试,我需要验证某个UI交互,这会导致通过Process.Start("Some Folder");打开某个目录

代码的实现已经过单元测试。在执行单元测试时,我模拟并验证了对此的调用,但 UI 是完全集成的,我需要验证绑定是否正确设置(它们依赖于 CommandParameter)。缺少绑定会导致控制台中出现错误 40,但仅在运行时检测到缺少或错误参数的命令。

那么Process Explorer向我展示了资源管理器.exe打开的句柄列表,它们如何全部标记为文件,并且有很多带有句柄的文件和目录,这些文件和目录不会直接显示为窗口任务栏中的打开目录。

检测当前是否打开了目录

嗯。这个解决方案是如此微不足道,以至于让我目瞪口呆。我已经尝试了各种方法,例如使用WinApi钩子挂接到资源管理器.exe以及ShellExecute WinApi调用和托管包装器。然后我想到了截图分析:/

由于我在 WPF UI 测试中使用 White,它本身在很大程度上依赖于 Microsoft 出色的 UIAutomation 框架,而 UIAutomation 几乎可以完成我通过自动化定位窗口所需的一切:

 var desktop = AutomationElement.RootElement;
 foreach (AutomationElement element in desktop.FindAll(TreeScope.Children, Condition.TrueCondition))
 {
     if (element.Current.ClassName != "CabinetWClass")
     {
          continue;
     }
     Console.WriteLine("{0}, {1}",element.Current.Name, element.Current.ClassName);
 }

不要忘记添加 UIAutomationClient 和 UIAutomationType 程序集和using System.Windows.Automation;