在过去几年中,基于 Web 的解决方案为全世界用户提供便利的访问,因而非常受欢迎。用户喜欢它们的另一个原因是它们的方便性。用户无需安装单独的应用程序;仅凭浏览器就能从任何连接 Internet 的设备连接自己的帐户。但是,从软件开发者和测试者的角度看,用户可以选择任何 Web 浏览器会带来这样一个问题:解决方案必须经过多种浏览器的测试。本文将介绍如何通过简单的方法解决这个问题,即只使用 C# 创建任何新型浏览器都可以执行的编码 UI 测试用例。
新 Visual Studio
几年前,当 Visual Studio 2010 发布时,它最有趣的功能之一是能够测试基于 Web 的解决方案的 UI。但是,当时这种技术的使用有一定限制;例如,唯一支持的 Web 浏览器是 Internet Explorer。再者,UI 测试依赖于记录 Web 网站上的用户操作,然后重现这些操作来模拟实际用户操作,这是许多开发者无法接受的。
Visual Studio 2013 候选发布版本 (RC) 在许多不同方面进行诸多改进,从新 IDE 功能到扩展测试框架(bit.ly/1bBryTZ 提供了 RC 版本的详细变化列表)。从我的角度来看,有两个新功能特别有趣。第一个,现在不仅可以测试 Internet Explorer(包括 Internet Explorer 11)的 UI,还可以测试所有其他新型浏览器,例如 Google Chrome 和 Mozilla Firefox。第二个,从测试开发的角度来看甚至更为重要,就是 Microsoft 所称的“可配置浏览器编码 UI 测试属性”。从根本上看,这个新功能定义了一组 UI 元素的搜索条件。本文后面将详细介绍这些功能。
被测系统
我将使用这两个新功能来创建跨浏览器、完全编码的 UI 测试。对于我的待测试系统 (SUT),我需要一个公开的、大家熟知的、基于 Web 的应用程序,因此我选择了 Facebook。我准备介绍两个基本用户方案。第一个方案是正测试用例,成功登录后将显示个人资料页面。第二个方案是负测试用例,我输入无效的用户凭据来尝试登录。此时,我希望用户响应中显示某种错误消息。
我需要解决几项挑战。首先,需要启动正确的浏览器(根据测试配置),而且它必须能够提供对特定 URL 的访问。其次,在运行期间,必须从 HTML 文档中提取特定的控件元素,以便为模拟的用户提供输入。必要时,必须输入控件元素的值,并单击正确的按钮向服务器提交 HTML 表单。代码还应能够处理服务器的响应,验证响应,并在测试用例完成时最终关闭浏览器(利用测试的清理方法)。
编码前
开始编码前,我需要准备环境,这非常简单。首先,我需要从 bit.ly/137Sg3U 下载 Visual Studio 2013 RC。默认情况下,可通过 Visual Studio 2013 RC 只针对 Internet Explorer 创建编码的 UI 测试,但这不是我感兴趣的;我要针对所有新型浏览器创建测试。当然,只要我在代码中指定用 Internet Explorer 以外的浏览器运行测试,将不会发生编译错误,但是在运行时会引发未处理的异常。之后我还将演示如何更改浏览器。为避免编码过程出现问题,我需要下载并安装一个名为“编码 UI 跨浏览器测试 Selenium 组件”(bit.ly/Sd7Pgw) 的 Visual Studio 扩展,通过它我可以对安装在计算机中的任何浏览器执行测试。
代码探讨
一切就绪后,即可演示如何创建新的编码 UI 项目。打开 Visual Studio 2013,单击“文件”|“新建项目”|“模板” |“Visual C#”|“测试”|“编码的 UI 测试项目”。输入项目名称,按“确定”查看新解决方案,如图 1 所示。
图 1 新建一个编码的 UI 测试项目