使用编码的用户界面测试来验证代码
自动测试通过其用户界面 (UI) 驱动应用程序,称为"编码 的 UI 测试 (CUITs)。 这些测试包括功能测试 UI 控件。 它们可以验证整个应用程序,包括其用户界面,正常工作。 编码的 UI 测试特别有用具有验证或其他逻辑。用户界面的位置,例如位于网页。 它们还经常用于自动运行现有手动测试。
如下图所示,一个典型的开发体验可能是一个其中,最初,可以生成应用程序 (f5) 并通过 UI 控件单击验证内容是否正常工作。 您可能决定创建编码的测试,所以不需要继续手动测试应用程序。 根据您的应用程序测试的特殊功能,您可以编写代码功能测试,或用于也可能不包含测试在 UI 级别的集成测试。 如果希望直接访问某些业务逻辑,您可能代码单元测试。 但是,在某些情况下,包括测试各种 UI 控件在您的应用程序可以是有用的。 编码的 UI 测试可以自动初始 (f5) 方案,验证代码改动不影响应用程序的功能。
创建编码的 UI 测试非常容易。 当 CUIT 在后台,测试生成器运行手动执行测试。 还可以指定什么值应出现在特定字段。 CUIT 测试生成器录制操作并生成从其代码。 在测试创建后,可以编辑该在既可用于修改序列的专用的编辑器。
或者,如果您在 Microsoft 测试管理器中记录的测试用例,可以从生成的代码。 有关更多信息,请参见录制和播放手动测试。
专用 CUIT 测试生成器,并编辑轻松创建,并编辑编码的 UI 测试,即使您的主程序技能在测试中心而不是代码。 但是,如果您是开发人员,并且希望扩展测试使用一种更高级的方法,构造代码,使其非常简单的复制和调整。 例如,您可以跟踪测试在网站购买操作,然后编辑生成的代码添加购买许多项目的循环。
要求
- Visual Studio 旗舰版, Visual Studio 高级专业版
有关编码的 UI 测试支持哪些平台和配置的更多信息,请参见支持编码的 UI 测试和操作录制的配置和平台。
主题内容
创建编码的 UI 测试
main 过程
启动和停止应用程序
验证 UI 控件属性
自定义编码的 UI 测试
生成的代码
编码的 UI 控件事件和属性
调试
接下来的内容
创建编码的 UI 测试
创建编码的 UI 测试项目。
编码的 UI 测试必须在编码的 UI 包含测试项目。 如果还没有编码的 UI 测试项目,请创建一个。 在 解决方案资源管理器,解决方案中的快捷菜单上,选择 添加,新建项目 然后选择 Visual Basic 或 Visual C#。 然后,选择 测试,编码的 UI 测试。
我不会看到 编码的 UI 测试 项目模板。
可以使用不支持编码的 UI 测试 Microsoft Visual Studio 2012 的版本。 创建编码的 UI 测试,必须使用 Visual Studio 旗舰版 或 Visual Studio 高级专业版。
添加为编码的 UI 测试文件。
如果您创建了一个编码的 UI 项,第一 CUIT 文件会自动添加到中。 若要添加另一个测试文件,请打开在编码的 UI 的快捷菜单测试项目,指向 添加,然后选择 编码的 UI 测试。
在 为编码的 UI 测试生成代码 对话框中,选择 录制操作、编辑 UI 映射或添加断言。
编码的 UI 测试生成器随即显示,Visual Studio 最小化。
记录序列。
开始记录,选择 录制 图标。 执行要在应用程序要测试的事件,包括启动应用程序,则需要它。
例如,因此,如果测试 Web 应用程序,您可能启动浏览器,导航到该网站和登录到应用程序。
暂停记录,例如,如果您必须处理来信,选择 暂停。
误 记录的删除事件,选择 编辑操作。
将复制 您的事件,选择 生成代码 图标和类型的生成代码 一个名称和说明的编码的 UI 测试方法。
验证在 UI 字段的值 (例如文本框。
选择在编码的 UI 测试生成器 添加断言,然后选择在运行的应用程序的 UI 控件。 在出现属性的列表,选择一个属性,例如,在文本框中 文本。 在快捷菜单上,选择 添加断言。 在对话框中,选择比较运算符比较、值和错误消息。
关闭断言窗口并选择 生成代码。
提示
交替显示记录事件之间和验证值。生成代码中的每个角色顺序或验证结束时。如果需要,您稍后可以插入新的事件和验证。
有关详细信息,请参见 验证控件属性。
查看生成的测试代码。
若要查看生成的代码,关闭 UI 测试生成器"窗口。 在代码中,可以看到您为每个步骤的名称。 代码在创建的 CUIT 文件:
[CodedUITest] public class CodedUITest1 { ... [TestMethod] public void CodedUITestMethod1() { this.UIMap.AddTwoNumbers(); this.UIMap.VerifyResultValue(); // To generate more code for this test, select // "Generate Code" from the shortcut menu. } }
添加更多操作和断言。
将光标放在适当点在测试方法,然后在快捷菜单上,选择 为编码的 UI 测试生成代码。 此时将插入新代码。
编辑测试操作和断言的详细信息。
打开 UIMap.uitest。 此文件位于打开编码的 UI 测试编辑器,可以编辑任何序列来记录和编辑断言。
有关更多信息,请参见使用编码的 UI 测试编辑器编辑编码的 UI 测试。
运行测试。
使用测试 Explorer 或打开在测试方法的快捷菜单,然后选择 运行测试。 有关如何运行测试的更多信息,请参见 用测试资源管理器运行单元测试 资源管理器和 其他选项的运行编码的 UI 测试 在 下一个是什么? 部分本主题末尾的。
本主题的其余部分提供有关步骤的更多详细信息此过程。
有关更详细的示例,请参见 演练:创建、编辑和维护编码的 UI 测试。 在本演练中,您将创建一个简单的 windows 演示基础 (WPF) 应用程序演示如何创建,编辑,并且,维护编码的 UI 测试。 本演练为更正由各种计时问题和控件重构中断的测试提供了解决方案。
启动和停止测应用程序
我不启动,然后停止"我的应用程序、浏览器或将数据库中的每一个都单独测试。 如何避免该?
如果不希望录制启动受测应用程序,必须启动的应用程序,在选择 录制 图标之前。
在测试结束时,测试运行终止的过程。 如果启动了在所测试的应用程序,应用程序通常关闭。 如果不希望测试结束应用程序,则退出时,必须添加 .runsettings 文件添加到解决方案和使用 KeepExecutorAliveAfterLegacyRun 选项。 有关更多信息,请参见使用 .runsettings 文件配置单元测试。
可以添加一个在每个测试方法开始时运行代码的测试初始化方法(通过 [TestInitialize] 特性标识)。 例如,可以开始从 TestInitialize 方法的应用程序。
可以将测试清理方法,确定由通过 [testcleanup] 特性,运行代码在每个测试方法结束时。 例如,可以从 TestCleanup 方法调用用于关闭应用程序的方法。
验证 UI 控件属性
使用**“编码的 UI 测试生成器”**,可以向测试的 UIMap 添加用户界面 (UI) 控件,也可以为使用 UI 控件的断言的验证方法生成代码。
若要为 UI 控件生成断言,请在编码的 UI 添加断言 工具测试生成器并将其拖动到应用程序控制的测试要验证是否正确。 在框确定控件的轮廓时,释放鼠标。 将立即在 UIMap.Designer.cs 文件中创建该控件类代码。
此控件的属性。添加断言 对话框现在列表。
另一种导航到特定控件将选择箭头 (<<) 外接 UI 控件图的视图。 若要查找父,同级控件或子控件,可以任意位置。映射可以单击并使用箭头键在该节点构树附近移动。
我不显示任何特性,当我选择"我的应用程序控件时,"或"不会在 UI 控件图的控件。
在应用程序代码中,要验证的控件必须具有唯一 ID,例如 HTML ID 属性或 WPF X:uid。 您可能需要更新应用程序代码添加这些 ID。
接下来,打开在属性的快捷菜单要验证的 UI 控件,然后指向 添加断言。 在 添加断言 对话框中,为断言选择 比较运算符,例如 AreEqual,然后键入断言的值在 比较值。
当您添加的所有时的断言选择该测试,确定。
若要生成断言代码并将控件添加到 UI 映射,请选择 生成代码 图标。 键入一个名称编码的 UI 测试方法和说明的方法,将添加为注释方法的。 选择 添加并生成。 然后,选择 关闭 图标关闭 编码的 UI 测试生成器。 这将生成代码类似于下面的代码。 例如,因此,如果输入的名称为 AssertForAddTwoNumbers,代码类似于以下示例:
添加对的调用断言方法 AssertForAddTwoNumbers 在编码的 UI 测试文件的测试方法:
[TestMethod] public void CodedUITestMethod1() { this.UIMap.AddTwoNumbers(); this.UIMap.AssertForAddTwoNumbers(); }
您可以编辑此文件更改步骤和断言的顺序,或创建新测试方法。 若要添加更多代码,将光标放在测试方法,并在快捷菜单中选择 为编码的 UI 测试生成代码。
将名为 AssertForAddTwoNumbers 的方法添加到您的 UI 映射 (UIMap.uitest)。 此文件位于打开编码的 UI 测试编辑器,可以编辑断言。
有关更多信息,请参见使用编码的 UI 测试编辑器编辑编码的 UI 测试。
还可以查看断言方法的生成代码在 UIMap.Designer.cs 的。 但是,不能编辑此文件。 如果需要创建一个适合的版本代码,请方法复制到另一个文件 (如 UIMap.cs,将重命名方法,并编辑它们即可。
public void AssertForAddTwoNumbers() { ... }
我想要选择的控件失去焦点和消失,当我尝试选择从编码的 UI 测试生成器工具的添加断言时。如何选择控件?
选择使用键盘的隐藏控件
有时,那么,当 添加控件和验证它们的属性,可能必须使用键盘。 例如,那么,当您尝试记录时使用上下文菜单控件的编码的 UI 测试,菜单项列表在控件中会失去焦点,然后消失,当您尝试选择添加断言工具从编码的 UI 测试时生成器。 这将在下面的图中所示,在 Internet Explorer 的上下文菜单将失去焦点和消失,如果尝试选择其与添加断言工具。
若要使用键盘选择 UI 控件,请将鼠标指针悬停在使用鼠标的控件。 然后同时按住 Ctrl 键和 我 键。 释放键。 该控件由代码的 UT 记录测试生成器。
警告
如果您使用的是 Microsoft Lync,必须关闭 Lync,在开始编码的 UI 测试生成器之前。Microsoft Lync 影响 Ctrl+I 键盘快捷键。
我无法记录在控件的鼠标悬停。是否有方式解决此问题?
手动记录的鼠标悬停
在某些情况下,使用编码的 UI 的特定控件测试可能需要使用键盘手动记录鼠标悬停事件。 例如,在中,测试时 windows 窗体或 windows 演示基础 (WPF) 应用程序,可能存在自定义代码。 当用户将鼠标指针悬停在其上时,或者,可能为悬停定义的特殊行为在一个控件,如展开节点构树的节点。 若要测试条件 (如这些,必须手动通知编码的 UI 测试生成器将鼠标指针悬停在控件按预定义的键盘键。
当执行时编码的 UI 测试,将鼠标指针悬停在控件。 然后,而您按住在您的键盘,移位和 R 键请按住 Ctrl。 释放键。 鼠标悬停事件。代码的 UT 记录测试生成器。
在生成测试方法后,代码类似于下面的示例将添加到 UIMap.Desinger.cs 文件:
// Mouse hover '1' label at (87, 9) Mouse.Hover(uIItem1Text, new Point(87, 9));
捕获鼠标悬停事件键指定在"我的环境中的其他位置使用。我是否能更改默认键分配?
配置的鼠标悬停键盘分配
如果需要,用于将在编码的 UI 的鼠标悬停事件 Ctrl+Shift+R 的默认值键盘分配测试可以配置使用不同的密钥。
警告
在一般情况下应不必更改鼠标悬停事件的键盘分配。当重新分配键盘分配时,请注意。您的选择可能在其他位置已被使用 Visual Studio 中或测试的应用程序。
若要更改键盘分配,您必须修改以下配置文件:
<drive letter:>\program files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CodedUITestBuilder.exe.config
在配置文件中,更改 HoverKeyModifier 和 HoverKey 键的值可以修改键盘分配:
<!-- Begin : Background Recorder Settings --> <!-- HoverKey to use. --> <add key="HoverKeyModifier" value="Control, Shift"/> <add key="HoverKey" value="R"/>
我存在问题记录网站的鼠标悬停。是否有这样的一个解决,也是?
设置隐式中为浏览器。
在很多网站,那么,当您将鼠标指针悬停在特定控件时,会展开以显示更多详细信息。 通常,这些类似于在桌面应用程序的菜单。 由于这是一个常见模式,编码的 UI 测试以启用浏览的 Web 的隐式悬停。 例如,因此,如果在 Internet Explorer 中记录悬停,则会收到。 这些操作可能导致获取订户多余的悬停。 因此,隐式悬停记录和 ContinueOnError 设置为在 UI 中 true 测试配置文件。 如果悬停操作失败,这允许继续播放。
若要启用隐式悬停记录在浏览器中,打开配置文件:
<drive letter:>\program files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CodedUITestBuilder.exe.config
验证配置文件具有密钥 RecordImplicitiHovers 设置为来 true 的值如下面的示例所示:
<!--Use this to enable/disable recording of implicit hovers.--> <add key="RecordImplicitHover" value="true"/>
自定义编码的 UI 测试
在创建后使用任何在 Visual Studio 中,的以下工具编码的 UI 测试,您可以编辑该:
编码的 UI 测试生成器: 使用编码的 UI 测试生成器添加其他控件,并对验证测试。 请参见本主题的一节 添加控件和验证它们的属性。
编码的 UI 测试编辑器: 编码的 UI 测试编辑器可轻松地修改编码的 UI 测试。 使用编码的 UI 测试编辑器,可以查找、查看和编辑测试方法。 也可以在 UI 控件图中编辑 UI 操作及其关联控件。 有关更多信息,请参见使用编码的 UI 测试编辑器编辑编码的 UI 测试。
代码编辑器:
手动添加控件的代码在测试按照本主题中的 编码的 UI 控件事件和属性 节中所述。
在创建编码的 UI 测试之后,您可以修改该数据驱动的。 有关更多信息,请参见如何:创建数据驱动的编码的 UI 测试。
在编码的 UI 测试播放中,您可以指示测试等待某些事件发生,如某个窗口出现、进度栏消失等。 为此,请将相应的 UITestControl.WaitForControlXXX() 方法。 有关完整的可用的方法,请参见 播放期间让编码的 UI 测试等待特定事件。 使用 WaitForControlEnabled 方法,对于等待控件启用编码的 UI 测试的示例,请参见 演练:创建、编辑和维护编码的 UI 测试。
编码的 UI 测试包含用于 Internet Explorer 9 和 Internet Explorer 10. 包含的部分 HTML5 控件支持。 有关更多信息,请参见在编码的 UI 测试中使用 HTML5 控件。
编码的 UI 测试代码指南:
生成的代码
当您选择 生成代码时,代码几节创建的:
在测试方法中的一行。
[CodedUITest] public class CodedUITest1 { ... [TestMethod] public void CodedUITestMethod1() { this.UIMap.AddTwoNumbers(); // To generate more code for this test, select // "Generate Code" from the shortcut menu. } }
在此方案中右击添加录制的操作和验证。 可以手动编辑它扩展或修改代码。 例如,可以在循环可以将某些代码。
还可以添加新测试方法的类似地将代码添加到它们。 每个测试方法必须具有 [TestMethod] 属性。
在 UIMap.uitest 的方法
此方法包括您记录或值来验证事件的详细信息。 可以通过打开 UIMap.uitest 编辑此代码。 它在删除或重构日志的事件的专用的编辑器中打开。
还可以查看在 UIMap.Designer.cs 的生成的方法。 此方法执行运行测试时录制的操作。
// File: UIMap.Designer.cs public partial class UIMap { /// <summary> /// Add two numbers /// </summary> public void AddTwoNumbers() { ... } }
警告
您不能编辑此文件,因为它会重新生成,当您创建更多测试时。
可以进行调整的版本这些方法通过复制到 UIMap.cs。 例如,您可以创建可从测试方法调用的参数化的版本:
// File: UIMap.cs public partial class UIMap // Same partial class { /// <summary> /// Add two numbers – parameterized version /// </summary> public void AddTwoNumbers(int firstNumber, int secondNumber) { ... // Code modified to use parameters. } }
在 UIMap.uitest 的说明
这些声明表示用于测试应用程序的 UI 控件。 生成的代码对其运行控件和访问其属性。
还可以使用它们,如果您编写代码。 例如,可以设置测试方法选择 Web 应用程序的超链接,在文本框中键入一个值或分支并根据在字段的值的不同测试的操作。
可以添加多个编码的 UI 测试以及多个 UI 映射对象和文件以便测试大型应用程序。 有关更多信息,请参见使用多个 UI 映射测试大型应用程序。
有关生成的代码的更多信息,请参见 编码的 UI 测试剖析。
编码的 UI 控件事件和属性
在编码的 UI 测试中使用 UI 测试控件时,这些控件分成两部分:操作和属性。
第一部分包括可对 UI 测试控件执行的操作。 例如,编码的 UI 测试可以模拟鼠标点击 UI 测试控件或模拟键盘输入来影响 UI 测试控件。
第二部分包括允许您获取和设置 UI 测试控件的属性。 例如,编码的 UI 测试可以获取计数。ListBox的项目设置,或 CheckBox 到选定的状态。
访问 UI 测试控件的操作
若要对 UI 测试控件的事件,如单击鼠标或键盘事件,在 Mouse 和 Keyboard 选件类使用方法:
若要对 UI 测试控件执行面向鼠标的操作(如鼠标单击),请使用 Click。
Mouse.Click(buttonCancel);
若要执行面向键盘的操作(如在编辑控件中键入内容),请使用 SendKeys。
Keyboard.SendKeys(textBoxDestination, @"C:\\Temp\\Output.txt");
访问 UI 测试控件的属性
获取和设置 UI 控件的特定属性值,可以直接获取或设置控件的属性值,也可以使用具有特定属性的名称 UITestControl.GetProperty 和 UITestControl.SetProperty 方法希望获取或设置。
GetProperty 返回对象,从而强制转换为适当的 Type。 SetProperty 为属性的值接受一个对象。
从 UI 测试控件直接获取或设置属性
从 T:system.exception 派生的控件:Microsoft.VisualStudio.TestTools.UITesting.UITestControl,如 T: Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlList 或 T: Microsoft.VisualStudio.TestTools.UITesting.WinControls.WinComboBox),可以直接获取或设置它们的属性值,如下所示:
int i = myHtmlList.ItemCount; myWinCheckBox.Checked = true;
从 UI 测试控件获取属性
若要从控件获取属性值,请使用 GetProperty。
若要指定要获取的控件属性,请在每个控件中使用来自 PropertyNames 类的相应字符串作为 GetProperty 的参数。
GetProperty 返回相应的数据类型,但此返回值将被强制转换为 Object。 然后必须将返回 Object 为正确的类型。
示例:
int i = (int)GetProperty(myHtmlList.PropertyNames.ItemCount);
设置 UI 测试控件的属性
若要设置控件中的属性,请使用 SetProperty。
若要指定控件的属性设置,请使用从 PropertyNames 选件类的相应字符串作为的第一个参数 SetProperty,与该属性的值作为第二个参数。
示例:
SetProperty(myWinCheckBox.PropertyNames.Checked, true);
调试
可以分析编码的 UI 测试中使用编码的 UI 测试日志。 编码的 UI 测试日志的筛选器并记录有关编码的 UI 测试运行的重要信息。 记录的布局可以调试快速问题。 有关更多信息,请参见使用编码的 UI 测试日志分析编码的 UI 测试。
下一个是什么?
运行编码的 UI 的其他选项测试: 本主题可以运行编码的 UI 直接从 Visual Studio 测试,如前面所述。 此外,可以运行自动 UI 测试从 Microsoft 测试管理器,或者从 Team Foundation Build。 当编码的 UI 测试时自动完成,则必须与桌面交互,则在运行单元测试时,与其他自动测试。
添加为自定义控件支持: 编码的 UI 测试框架并非支持每个可能的 UI,可能不支持您要测试的 UI。 例如,不能立即创建 Microsoft Excel UI 的编码的 UI 测试。 然而,可以创建编码的 UI 测试框架的扩展来支持自定义控件。
编码的 UI 测试通常用于自动化手动测试。 有关其他指南,请参见 测试使用 Visual Studio 进行附带的 2012 版–第 5 章:自动化系统测试。 有关手动测试的更多信息,请参见 使用 Microsoft 测试管理器创建手动测试用例。 有关自动化的更多信息,请参见系统测试 使用 Microsoft 测试管理器创建自动测试。
外部资源
指南
测试使用 Visual Studio 进行附带的 2012 版–第 2 章:单元测试:测试。
测试使用 Visual Studio 进行附带的 2012 版–第 5 章:自动化系统测试
FAQ
论坛
Visual Studio UI 自动测试 (包括 CodedUI)
请参见
任务
参考
概念
从 Visual Studio 2010 升级编码的 UI 测试