检测目录是否当前打开

时间:2013-10-16 17:00:39

标签: c# unit-testing black-box-testing

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

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

Well Process Explorer向我展示了explorer.exe打开的句柄列表,它们都被标记为File,还有大量带有句柄的文件和目录,这些文件和目录没有直接显示为任务栏中的打开目录窗户。

1 个答案:

答案 0 :(得分:0)

好。解决方案非常微不足道,让我感到震惊。 我尝试了各种各样的东西,比如使用WinApi钩子挂钩到explorer.exe和ShellExecute WinApi调用以及托管包装器。然后我想到了截图分析:/

因为我正在使用White进行WPF UI测试,它本身非常依赖于微软强大的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和UIAutomationTypes程序集以及using System.Windows.Automation;