防止窗户打开

Posted

技术标签:

【中文标题】防止窗户打开【英文标题】:Prevent windows from opening 【发布时间】:2013-05-13 07:57:02 【问题描述】:

您好想问一个奇怪的问题。它是关于测试 WPF 应用程序的。

我当前的测试对象是一个自发打开信息对话框的 WF 应用程序。这些对话框是模态的,每次都可以打开。这对于在该应用程序上运行的自动化测试来说是相当令人不安的。每当我的测试人员访问可视化树并尝试访问 GUI(如调用按钮等)时,可能会打开这样的对话框窗口,从而通过其模式阻止 GUI 并使测试失败。

解决此问题的一个方法是阻止这些对话框打开。我无法直接更改被测应用程序的行为,但我可以订阅所有窗口事件(如初始化、加载、渲染等)。我想使用其中一个事件来防止窗口打开并以模式方式阻塞 GUI。

我尝试使用加载的事件,因为它是实际显示窗口之前的最后一个事件,但是在相应的窗口上调用 Close() 会导致崩溃。我也试过 Hide()... 这可以防止窗口变得可见,但 GUI 仍然被不可见的对话框阻止。

是否有人知道如何有效地阻止 WPF 窗口/对话框打开或至少以模式方式阻止 GUI?

【问题讨论】:

即使您可以阻止它,您仍然必须为具有确定/取消/重试/...按钮的对话框提供返回值。无论如何,这里唯一真正的解决方案是显而易见的:应该修改源代码,以便使用某些 DI 框架最终提供的 IModelDialogService 之类的东西。然后在运行测试时,您提供该服务的实现,它什么都不做...... 嗯……那些信息性的、自发的对话框除了标准的关闭按钮和“确定”按钮之外没有任何其他按钮。所有具有“重试”或“取消”等内容的对话框都不会自发打开,并且可以预期和系统地处理(我已经这样做了)。这样的基本对话框难道也没有办法吗? 【参考方案1】:

如果您在对话框中使用dialogservice,您可以简单地模拟它以进行测试

【讨论】:

不幸的是,他们为我的测试修改应用程序的可能性很小。所以不需要修改 AUT 的方法会好很多。

以上是关于防止窗户打开的主要内容,如果未能解决你的问题,请参考以下文章

javascript 打开窗户

如何防止窗户被移动?

电脑windows是啥意思

CodeForces 595A

确定打开窗口的顺序

如果已经打开,请通过双击防止重新打开工作簿