播放期间让编码的 UI 测试等待特定事件

在编码的 UI 测试播放中,您可以指示测试等待某些事件发生,如某个窗口出现、进度栏消失等。 为此,可使用下表所列的相应 UITestControl.WaitForControlXXX() 方法。 有关使用 WaitForControlEnabled 方法等待启用某个控件的编码 UI 测试的示例,请参见演练:创建、编辑和维护编码的 UI 测试

要求

  • Visual Studio 旗舰版, Visual Studio 高级专业版

提示

在中,可使用编码的 UI 测试编辑器事件之前,您还可以添加延迟。有关更多信息,请参见如何:使用编码的 UI 测试编辑器在 UI 操作之前插入延迟

UITestControl.WaitForControlXXX() 方法

UITestControl.WaitForControlXXX() 方法

描述

[ M:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlReady ]

等待控件准备好接受鼠标和键盘输入。 该引擎隐式调用此 API,以便所有操作等待该控件在执行任何操作之前做好准备。 但是,在某些复杂方案中,可能必须执行显式调用。

[ M:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlEnabled ]

在向导通过调用服务器对输入执行某些异步验证时,等待控件启用。 例如,您可以使用方法等待向导的“下一步”按钮启用。 有关此方法的示例,请参见演练:创建、编辑和维护编码的 UI 测试

[ M:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlExist ]

等待控件显示在 UI 上。 例如,您希望应用程序执行参数验证后显示一个错误对话框。 验证所需的时间不是固定的。 您可以使用此方法等待错误对话框。

[ M:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlNotExist ]

等待控件从 UI 消失。 例如,可以等待进度栏消失。

[ M:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlPropertyEqual(System.String,System.Object) ]

等待控件的指定属性达到给定值。 例如,可以等待状态文本更改为“已完成”

[ M:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlPropertyNotEqual(System.String,System.Object) ]

等待控件的指定属性达到指定值的相反值。 例如,可以等待编辑框变为不是只读的(即可以编辑)。

[ M:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlCondition(System.Predicate{Microsoft.VisualStudio.TestTools.UITesting.UITestControl}) ]

等待指定谓词变回 true。 这可用于给定控件上的复杂等待操作(如 OR 条件)。 例如,您可以等到状态文本变为“成功”“失败”,如下面的代码所示:

// Define the method to evaluate the condition 
private static bool IsStatusDone(UITestControl control) 
{ 
    WinText statusText = control as WinText; 
    return statusText.DisplayText == "Succeeded" || statusText.DisplayText == "Failed"; 
} 
// In test method, wait till the method evaluates to true 
statusText.WaitForControlCondition(IsStatusDone);

[ M:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForCondition``1(``0,System.Predicate{``0}) ]

所有上述方法都是 UITestControl 的实例方法。 此方法是静态方法。 此方法也等待指定谓词变为 true,但它可用于多个控件上的复杂等待操作(如 OR 条件)。 例如,您可以等到状态文本变为“成功”或等到显示错误消息,如下面的代码所示:

// Define the method to evaluate the condition 
private static bool IsStatusDoneOrError(UITestControl[] controls) 
{ 
    WinText statusText = controls[0] as WinText; 
    WinWindow errorDialog = controls[1] as WinWindow; 
    return statusText.DisplayText == "Succeeded" || errorDialog.Exists; 
} 
// In test method, wait till the method evaluates to true 
UITestControl.WaitForCondition<UITestControl[]>(new UITestControl[] { statusText, errorDialog }, IsStatusDoneOrError); 

所有这些方法都有以下行为:

  • 如果等待成功,则这些方法返回 true;如果等待失败,则返回 false。

  • 等待操作的隐式超时由 WaitForReadyTimeout 属性指定。 此属性的默认值为 60000 毫秒(1 分钟)。

  • 这些方法有一个重载,可接受以毫秒为单位的显式超时。 但是,当等待操作导致对控件进行隐式搜索时,或者当应用程序正忙时,实际等待时间可能要长于指定的超时。

上述函数功能强大并且很灵活,几乎可以满足所有应用条件。 但是,如果这些方法不能满足需要并且您需要在代码中对 WaitSleep 进行编码,建议使用 Playback.Wait() 而不要使用 Thread.Sleep() API。 原因包括:

  • 可以使用 ThinkTimeMultiplier属性修改休眠持续时间。 默认情况下,此变量为 1,不过,您可以将其递增或递减,以更改整个代码的等待时间。 例如,如果您专门在较慢的网络或某些其他速度较慢的条件下进行测试,则可以在一个位置(或者甚至在配置文件中)将此变量的值更改为 1.5,以便将所有位置的等待时间都增加 50%。

  • Playback.Wait() 在 for 循环的一小块代码块中内部调用 Thread.Sleep()(进行上述计算之后),同时检查用户取消\中断操作。 换言之,通过使用 Playback.Wait(),您可以在等待结束之前取消播放,而休眠可能引发异常,也可能不引发异常。

提示

通过编码的 UI 测试编辑器,可轻松地修改编码的 UI 测试。使用编码的 UI 测试编辑器,可以查找、查看和编辑测试方法。也可以在 UI 控件图中编辑 UI 操作及其关联控件。有关更多信息,请参见使用编码的 UI 测试编辑器编辑编码的 UI 测试

指南

有关其他信息,请参见 测试使用 Visual Studio 进行附带的 2012 版–第 5 章:自动化系统测试

请参见

任务

演练:创建、编辑和维护编码的 UI 测试

如何:使用编码的 UI 测试编辑器在 UI 操作之前插入延迟

概念

使用编码的用户界面测试来验证代码

编码的 UI 测试剖析

支持编码的 UI 测试和操作录制的配置和平台

其他资源

创建编码的 UI 测试