Aaron的测试生活小说

半两五钱,笃志向前
  首页  :: 新随笔  :: 联系 :: 管理

Winform自动化测试解决对话框问题(多线程)

Posted on 2009-02-09 22:17  Aaron Wu  阅读(551)  评论(0编辑  收藏  举报

  原文发表于2008-11-11 15:27:58

近期做一个项目的自动化测试,遇到弹出的dialog的处理。

当时第一印象就是应该用多线程来处理,即一个线程来处理打开应用程序,模拟操作然后点击“确定”,等待弹出对话框。另一个线程则用来监视是否有对话框,然后判断并关闭对话框。

在网络上查找了一些资料,最终采用了AutoResetEvent,ManualResetEvent的方式解决这个问题,在线程池中操作对话框监视和关闭对话框两个操作。

附上代码:

 

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections;
using System.Threading;
using System.Windows.Forms;

namespace APSAutoFunctionalTestProjecct
{
    
public class CalendarHanding
    {     
        AutoResetEvent autoResetEvent;
        ManualResetEvent manualResetEvent; 
        
        
public CalendarHanding()
        {           
            autoResetEvent 
= new AutoResetEvent(false);
            manualResetEvent 
= new ManualResetEvent(false);
            ThreadPool.QueueUserWorkItem(
new WaitCallback(NewCalendar));
            ThreadPool.QueueUserWorkItem(
new WaitCallback(CloseTheDialog));
            WaitHandle.WaitAll(
new AutoResetEvent[] { autoResetEvent },5000,true);
            manualResetEvent.Reset();
        }

        
public void NewCalendar(object stateInfo)
        {
                
//操作找到窗体的函数(没有点击确定的步骤)
                InputTestData("TesTData");
                manualResetEvent.Set();
                
//点击“确定”按钮提交数据,点击后待测系统会弹出一个信息提示框
                ((Ranorex.Button)(controlList[1])).Click();
        }

        
public void CloseTheDialog(object stateInfo)
        {
           
                manualResetEvent.WaitOne();                
                
//关闭信息提示框
                CloseDialog("InformationDialog");
                autoResetEvent.Set();
        }
    }
}