【问题标题】:Programatically finding a message box and generating a click on a button以编程方式查找消息框并生成单击按钮
【发布时间】:2010-11-16 23:25:49
【问题描述】:

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

【问题讨论】:

    标签: c# .net winforms user-interface testing


    【解决方案1】:

    我建议治疗基础疾病而不是症状。 花几分钟阅读这些

    简而言之,使用一个界面来分离所有模态对话框弹出窗口——这对于 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 API 和 NUnitForms 方面取得了一些成功......

    【讨论】:

      【解决方案2】:
      • codeplex.com/white - 免费

      • testautomationfx.com - 商业但非常好

      【讨论】:

        【解决方案3】:

        您可能必须使用 WinAPI 调用(FindWindowEx 等)并将 LMB 消息向下和向上发送到按钮句柄。

        【讨论】:

        • 通常 UI 自动化(如我链接到的东西)是一种更高级别的方法,即使这是有效的 [我在此基础上给出了 +1)]
        【解决方案4】:

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

        【讨论】:

        • 我如何找到按钮?
        【解决方案5】:

        最好的免费工具之一是AutoHotKey

        【讨论】:

          【解决方案6】:

          您可以使用autoit脚本系统。

          但我建议将 GUI 和实现分开,因为单元测试的基本原则是“单元”,其中单元是与其他类或现实世界分离的类。
          这一原则为您提供了良好的类设计,并有助于避免软件爆发和许多其他好东西..

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-10-09
            • 2017-06-17
            • 2013-05-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-11
            • 2011-09-03
            相关资源
            最近更新 更多