本主题介绍在开发编码的 UI 测试时应遵循的最佳做法。
最佳做法
使用以下准则来创建灵活的编码的 UI 测试。
- 尽可能使用**“编码的 UI 测试生成器”**。 
- 不要直接修改 UIMap.designer.cs 文件。 如果执行此操作,将覆盖对该文件的更改。 
- 将测试创建为一系列录制的方法。 有关如何录制方法的更多信息,请参见如何:创建编码的 UI 测试。 
- 每个录制的方法应作用于单个页面、窗体或对话框。 为每个新页面、窗体或对话框创建新测试方法。 
- 创建方法时,请使用有意义的方法名称,而不是默认名称。 有意义的名称有助于标识方法的用途。 
- 如果可能,将每个录制的方法限制为少于 10 次操作。 这种模块化方法便于在 UI 更改时替换方法。 
- 使用**“编码的 UI 测试生成器”**创建每个断言,这会自动向 UIMap.Designer.cs 文件中添加断言方法。 
- 如果用户界面 (UI) 更改,请重新录制测试方法或断言方法,或重新录制现有测试方法中受影响的部分。 
- 为受测应用程序中的每个模块创建一个单独的 UIMap 文件。 有关更多信息,请参见使用多个 UI 映射测试大型应用程序。 
- 在受测应用程序中创建 UI 控件时,请使用有意义的名称。 这比自动生成的控件名称更有意义,更易于使用。 
- 如果通过用 API 编码来创建断言,请为 UIMap.cs 文件中 UIMap 类部分中的每个断言创建一个方法。 从测试方法中调用此方法以执行断言。 
- 如果直接用 API 编码,请在代码中尽可能使用 UIMap.Designer.cs 文件中生成的类中的属性和方法。 这些类将使您的工作更简单、可靠,并帮助您提高效率。 
编码的 UI 测试能够自动适应用户界面中的许多更改。 例如,在大多数情况下,如果 UI 元素更改了位置或颜色,则编码的 UI 测试仍将找到正确的元素。
在测试运行期间,测试框架使用一组搜索属性来定位 UI 控件,在 UIMap.Designer.cs 文件中由**“编码的 UI 测试生成器”**创建的定义中,会对每个控件类应用这些属性。 搜索属性包含可用于标识控件的属性名称和属性值的名称-值对,例如控件的 FriendlyName、Name 和 ControlType 属性。 如果搜索属性未更改,则编码的 UI 测试会在 UI 中成功找到控件。 如果搜索属性发生更改,编码的 UI 测试会使用一个智能匹配算法,应用试探方法在 UI 中查找控件和窗口。 当 UI 已更改时,您或许能够修改以前标识的元素的搜索属性,以确保能够找到这些元素。
如果用户界面发生更改应如何操作
在开发过程中,用户界面经常更改。 下面提供了一些可以降低这些更改的影响的方法:
- 找到引用此控件的录制的方法,并使用**“编码的 UI 测试生成器”**重新录制此方法的操作。 可对方法使用同一名称,以覆盖现有操作。 
- 如果控件有一个不再有效的断言,则执行下列操作: - 删除包含断言的方法。 
- 从测试方法中移除对此方法的调用。 
- 通过将十字线按钮拖动到 UI 控件来添加新的断言,打开 UI 映射,然后添加新的断言。 
 
有关如何录制编码的 UI 测试的更多信息,请参见如何:通过录制受测应用程序来生成编码的 UI 测试或如何:创建编码的 UI 测试。
需要先完成后台进程然后测试才能继续时应如何操作
可能必须等到进程完成,然后才能继续下一个 UI 操作。 为此,可以使用 WaitForReadyLevel 在测试继续之前等待,如以下示例所示。
// Set the playback to wait for all threads to finish
Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.AllThreads;
// Press the submit button
this.UIMap.ClickSubmit();
// Reset the playback to wait only for the UI thread to finish
Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.UIThreadOnly;
请参见
任务
如何:使用编码的 UI 测试生成器添加 UI 控件和验证代码
如何:使用编码的 UI 测试生成器添加 UI 控件和验证代码
参考
UITesting