【问题标题】:Detect whether a directory is currently opened检测当前是否打开了目录
【发布时间】:2013-10-16 17:00:39
【问题描述】:

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

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

进程资源管理器为 explorer.exe 向我显示了打开的句柄列表,但它们都被标记为文件,并且有很多文件和目录带有它们的句柄,而这些文件和目录并未直接显示为任务栏中的打开目录窗户。

【问题讨论】:

  • 您需要为此进行系统测试,而不是单元测试。
  • 我没有做单元测试。我说我已经测试了调用“资源管理器中的打开目录”服务的 ViewModel 的调用链。但是现在我正在做一个黑盒 UI 测试,这对我来说是一个系统测试。但是,无论我如何调用 UI 测试,我都需要验证一个目录是否打开。

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


【解决方案1】:

嗯。解决方案是如此的微不足道,以至于让我大吃一惊。 我尝试了各种方法,例如使用 WinApi 挂钩来挂钩 explorer.exe 和 ShellExecute WinApi 调用以及托管包装器。然后我想到了截图分析:/

当我使用 White 进行 WPF UI 测试时,它本身在很大程度上依赖于 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 和 UIAutomationTypes 程序集和using System.Windows.Automation;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多