Web 应用程序用户界面低层测试自动化

发表于:2009-11-20 12:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:James McCaffrey    来源:51Testing软件测试网采编

分享:

  测试自动化

  测试场景系统由一个单一文件组成。我打算把我的测试集实现为一个C#控制台应用程序,但你将会看到,我能使用任何与.Net兼容的语言 (例如,Visual Basic .NET),该技术也能用于任何程序(例如,一个Windows程序)和测试框架(例如,NUnit)。场景的整体结构显示在图3中。首先,我向“Microsoft Internet Controls”这个优秀的COM组件添加了一个引用(reference)。这是shdocvw.dll模块的一个别名,该模块拥有操作基于 Windows的浏览器(例如IE和Windows Explorer)的能力。然后我向Microsoft.mshtml.Net组件添加了一个引用。这是mshtml.dll模块的一个别名,该模块拥有访问HTML元素的能力。我向两个相应的名字空间增加了“using”声明,这样我就不需完整验证他们的类了。我也针对 System.Diagnostics和System.Threading分别增加了“using”声明,这样我容易引用前者的Process类,也能在我合适的时候引用后者的Thread.Slepp方法来暂停我的自动化过程。

  这项技术的一个关键是要有能力确定一个Web页面/文档/应用程序何时已经在IE中充分装载了。我定义了一个类范围的AutoResetEvent对象documentComplet,我使用该对象来标记一个已经充分装载了文档的等待线程。

static AutoResetEvent documentComplete = new AutoResetEvent(false);

  马上,我就会详细介绍这里的细节。我由向命令行中打印一条状态信息来开始我的测试场景。然后我声明了一个Boolean类型的变量pass并把它设为 false。我假设测试场景会失败,如果我检测到应用程序的最后状态是正确的,我修正我的假设并把pass变量设为true。下一步我声明了一个 InternetExplore对象“ie”:

Console.WriteLine("\nStart test run");
bool pass = false;
InternetExplorer ie = null;

  Internet Explorer类是在SHDocVw名字空间中定义的。该类有很多方法操纵Internet Explorer的一个实例,但是由你决定启动Internet Explorer并把两者相关联,如下所示:

// launch explorer
Console.WriteLine("\nLaunching an instance of IE");
Process p = Process.Start("iexplore.exe", "about:blank");
if (p == null) throw new Exception("Could not launch IE");
Console.WriteLine("Process handle = " + p.MainWindowHandle.ToString());

// find all active browsers
SHDocVw.ShellWindows allBrowsers = new SHDocVw.ShellWindows();
Console.WriteLine("Number active browsers = " + allBrowsers.Count);
if (allBrowsers.Count == 0) throw new Exception("Cannot find IE");

  我使用System.Diagnostics.Process名字空间中的Start方法来启动一个Internet Explorer(iexplore.exe)并装载空白页面“about:blank”;Start方法返回对创建进程对象的一个引用。然后我初始化了一个名为allBrowsers的ShellWindows对象。这个对象掌握了对所有ShellWindows对象的引用,也掌握了对浏览器的引用(包括Windows Explorer的实例,我刚才启动的Internet Explorer的实例和之前启动的Internet Explorer的实例)。我使用Count属性来显示关于目前活动浏览器的诊断信息,以便确保Internet Explorer成功启动了。测试自动化的下一步是把新的进程与Internet Explorer对象关联起来:

Console.WriteLine("Attaching to IE");
for(int i=0; i < allBrowsers.Count && ie == null; i++)
{
  InternetExplorer e = (InternetExplorer)allBrowsers.Item(i);
  if (e.HWND == (int)p.MainWindowHandle) ie = e;
}
if (ie == null)  throw new Exception("Failed to attach to IE");

52/5<12345>
100家互联网大公司java笔试题汇总,填问卷领取~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号