以编程的方式查找消息框并生成按钮点击

3

我正在尝试自动化测试一个winform应用程序。我在与测试代码相同的进程中运行它,因此很容易找到.Net控件并模拟用户对其的操作。然而,我遇到了一个问题,就是如何处理消息框(使用标准的MessageBox.Show方法创建)。我该如何获取它并模拟按下按钮?

6个回答

6
我建议治疗潜在的疾病而不是症状。花几分钟时间阅读以下内容: 简而言之,使用接口将所有模态对话框弹出分离出来,这对UI测试自动化来说非常麻烦。然后,您可以替换接口的模拟实现,该实现无任何操作或返回预定测试值。真正的实现当然会弹出实际的模态对话框...类似于以下内容(来自第二个链接)。
public class UserInterrogator : IUserInterrogator
{
    private Form owner;

    public UserInterrogator(Form owner)
    {  this.owner = owner;    }

    public Font GetFontFromUser()  // member of the IUserInterrogator interface
    {
        FontDialog fd = new FontDialog();
        fd.ShowDialog( owner );
        return fd.Font;
    }
}

当然,更简单的方法是编写一些代码来查找对话框并关闭/终止它。我看到有些人使用Win32 APIs和NUnitForms取得了一些成功...


3
  • codeplex.com/white - 免费

  • testautomationfx.com - 商业软件但非常优秀


2

您可能需要使用WinAPI调用(FindWindowEx等)并发送LMB按下和松开的消息到按钮句柄。


通常UI自动化(如我所链接的内容)是更高级的方法,即使这是有效的[我基于此给了+1]。 - Ruben Bartelink

2
如果你知道标题(并且它是唯一的),可以循环遍历Application.OpenForms来查找它。

我该如何找到按钮? - Grzenio

2

其中最好的免费工具之一是 AutoHotKey


0
你可以使用autoit脚本系统。

但我建议将GUI和实现分开,因为单元测试的基本原则是“单元”,其中“单元”是从其他类或现实世界中分离出来的类。
这个原则可以帮助你设计出良好的类,并帮助避免软件喷发和许多其他好东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接