近期做一个项目的自动化测试,遇到弹出的dialog的处理。
当时第一印象就是应该用多线程来处理,即一个线程来处理打开应用程序,模拟操作然后点击“确定”,等待弹出对话框。另一个线程则用来监视是否有对话框,然后判断并关闭对话框。
原文发表于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();
}
}
}
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();
}
}
}