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

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

要求

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

使用编码的 UI 测试编辑器,还可以在操作之前添加延迟。有关详细信息,请参阅如何:使用编码的 UI 测试编辑器在 UI 操作之前插入延迟

UITestControl.WaitForControlXXX() 方法

UITestControl.WaitForControlXXX() 方法

说明

WaitForControlReady

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

WaitForControlEnabled

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

WaitForControlExist

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

WaitForControlNotExist

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

WaitForControlPropertyEqual

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

WaitForControlPropertyNotEqual

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

WaitForControlCondition

等待指定谓词变回 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);

WaitForCondition``1

所有上述方法都是 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 测试和操作录制的配置和平台

其他资源

创建编码的 UI 测试