C# 以编程方式查找消息框并单击按钮

C# 以编程方式查找消息框并单击按钮,c#,.net,winforms,user-interface,testing,C#,.net,Winforms,User Interface,Testing,我正在尝试自动化winform应用程序的测试。我在与测试代码相同的过程中运行它,因此很容易找到.Net控件并在其上模拟用户操作。然而,我被一个消息框(使用标准MessageBox.Show方法创建)卡住了一点。我如何抓住它并模拟按下按钮? codeplex.com/white-免费 testautomationfx.com-商业化但非常好 您可能必须使用WinAPI调用(FindWindowEx,ect)并向按钮手柄上下发送LMB消息。如果您知道标题(并且它是唯一的),您可以通过Applicat

我正在尝试自动化winform应用程序的测试。我在与测试代码相同的过程中运行它,因此很容易找到.Net控件并在其上模拟用户操作。然而,我被一个消息框(使用标准MessageBox.Show方法创建)卡住了一点。我如何抓住它并模拟按下按钮?

  • codeplex.com/white-免费

  • testautomationfx.com-商业化但非常好


您可能必须使用WinAPI调用(FindWindowEx,ect)并向按钮手柄上下发送LMB消息。

如果您知道标题(并且它是唯一的),您可以通过Application.OpenForms循环找到它。

最好的免费工具之一是。

我建议您治疗潜在的疾病,而不是症状。 花几分钟读一下这些

简言之,使用一个界面来分离所有模式对话框弹出窗口——这是UI测试自动化的一大难题。然后可以替换不执行任何操作或返回预定测试值的接口的模拟实现。课程的实际实现以模块方式弹出实际对话框。。。类似这样的内容(来自第二个链接)

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

您可以使用脚本系统。

但我建议将GUI和实现分开,因为单元测试的基本原则是“单元”,单元是与其他类或现实世界分开的类。

这一原则为您提供了良好的类设计,并有助于避免软件爆发和其他许多好东西。

一般来说,UI自动化(如我链接到的东西)是一种更高级别的方法,即使这是有效的[我在这个基础上给出了+1)],我如何找到按钮?
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;
    }
}