再生中に特定のイベントを待機するようにコード化された UIT テストを設定Making Coded UI Tests Wait For Specific Events During Playback

コード化された UI テストの再生では、テストに対して指示することで、ウィンドウの表示やプログレス バーの非表示などの特定のイベントが発生するまで待機することができます。In a coded UI test playback, you can instruct the test to wait for certain events to occur, such as a window to appear, the progress bar to disappear, and so on. これを実行するには、次の表で説明されているように、該当する UITestControl.WaitForControlXXX() メソッドを使用します。To do this, use the appropriate UITestControl.WaitForControlXXX() method, as described in the following table. <xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlEnabled%2A> メソッドで有効化されるコントロールを待機するコード化された UI テストの例については、「チュートリアル: コード化された UI テストの作成、編集、および保守」を参照してください。For an example of a coded UI test that waits for a control to be enabled using the <xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlEnabled%2A> method, see Walkthrough: Creating, Editing and Maintaining a Coded UI Test.

RequirementsRequirements

Visual Studio EnterpriseVisual Studio Enterprise

ヒント

またコード化された UI テスト エディターで操作の前に遅延を追加することもできます。You can also add delays before actions using the Coded UI Test Editor. 詳細については、「How to: Insert a Delay Before a UI Action Using the Coded UI Test Editor (方法: コード化された UI テスト エディターを使用して UI アクションの前に遅延を挿入する)」をご覧ください。For more information, see How to: Insert a Delay Before a UI Action Using the Coded UI Test Editor.

UITestControl.WaitForControlXXX() メソッドUITestControl.WaitForControlXXX() Methods

<xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlReady%2A>

コントロールでマウスおよびキーボード入力を受け入れる準備が整うまで待機します。Waits for the control to be ready to accept mouse and keyboard input. エンジンは、すべての操作についてこの API を暗黙的に呼び出してコントロールの準備が整うまで待機し、その後、なんらかの操作を実行します。The engine implicitly calls this API for all actions to wait for the control to be ready before doing any operation. ただし、複雑なシナリオでは、明示的に呼び出すことが必要になる場合があります。However, in certain esoteric scenario, you may have to do explicit call.

<xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlEnabled%2A>

サーバーを呼び出すことでウィザードが入力の非同期の検証を実行するときに、コントロールが有効化されるまで待機します。Waits for the control to be enabled when the wizard is doing some asynchronous validation of the input by making calls to the server. たとえば、このメソッドを使用してウィザードの [次へ] ボタンが有効化されるまで待機します。For example, you can method to wait for the Next button of the wizard to be enabled (). このメソッドの使用例については、「Walkthrough: Creating, Editing and Maintaining a Coded UI Test (チュートリアル: コード化された UI テストの作成、編集、および保守)」をご覧ください。For an example of this method, see Walkthrough: Creating, Editing and Maintaining a Coded UI Test.

<xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlExist%2A>

コントロールが UI に表示されるまで待機します。Waits for the control to appear on the UI. たとえば、アプリケーションでパラメーターの検証が行われた後にエラー ダイアログの表示を必要とする場合などです。For example, you are expecting an error dialog after the application has done the validation of the parameters. 検証にかかる時間はさまざまです。The time taken for validation is variable. このメソッドを使用してエラー ダイアログ ボックスを待機することができます。You can use this method to wait for the error dialog box.

<xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlNotExist%2A>

コントロールが UI から非表示になるまで待機します。Waits for the control to disappear from the UI. たとえば、プログレス バーが表示されなくなるまで待機する場合などです。For example, you can wait for the progress bar to disappear.

<xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlPropertyEqual%2A>

指定されたコントロールのプロパティが指定された値になるまで待機します。Waits for the specified property of the control to have the given value. たとえば、ステータス テキストが完了になるまで待機します。For example, you wait for the status text to change to Done.

<xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlPropertyNotEqual%2A>

指定されたコントロールのプロパティが指定された値の逆になるまで待機します。Waits for the specified property of the control to have the opposite of a specified value. たとえば、編集ボックスが読み取り専用ではなくなる、つまり、編集可能になるまで待機します。For example, you wait for the edit box to be not read-only, that is, editable.

<xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlCondition%2A>

指定された述語で true が返されるまで待機します。Waits for the specified predicate returns to be true. これは、指定されたコントロールでの複合的な待機操作 (OR 条件など) で使用できます。This can be used for complex wait operation (like OR conditions) on a given control. たとえば、次のコードに示されているように、ステータス テキストが Succeeded または Failed になるまで待機する場合があります。For example, you can wait until the status text is Succeeded or Failed as shown in the following code:


// 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);  

<xref:Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForCondition%2A>

上に示したメソッドはすべて UITestControl のインスタンス メソッドです。All the previous methods are instance methods of UITestControl. このメソッドは静的なメソッドです。This method is a static method. このメソッドも指定された述語が true になるまで待機しますが、複数のコントロールの複合的な待機操作 (OR 条件など) で使用される場合があります。This method also waits for the specified predicate to be true but it can be used for complex wait operation (like OR conditions) on multiple controls. たとえば、次のコードに示されているように、ステータス テキストが Succeeded になるか、エラー メッセージが表示されるまで待機する場合があります。For example, you can wait until the status text is Succeeded or until an error message appears, as shown in the following code:


// 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);  

上記のメソッドはすべて次のように動作します。All these methods have following behavior:

待機が成功すれば true を返し、失敗すれば false を返します。The methods return true if the wait is successful and false if the wait failed.

待機操作の暗黙的なタイムアウトは、<xref:Microsoft.VisualStudio.TestTools.UITesting.PlaybackSettings.WaitForReadyTimeout%2A> プロパティによって指定されます。The implicit timeout for the wait operation is specified by <xref:Microsoft.VisualStudio.TestTools.UITesting.PlaybackSettings.WaitForReadyTimeout%2A> property. このプロパティの既定値は 60000 ミリ秒 (1 分) です。The default value of this property is 60000 milliseconds (one minute).

メソッドには、ミリ秒単位の明示的なタイムアウトを取得するためのオーバーロードがあります。The methods have an overload to take explicit timeout in milliseconds. ただし、待機操作の結果、コントロールが暗黙的に検索されたり、アプリケーションがビジー状態であったりすると、実際の待機時間が指定されたタイムアウトよりも長くなる可能性があります。However, when the wait operation results in an implicit search for the control or, when the application is busy, the actual wait time could be more than the timeout specified.

上で説明した機能は強力で柔軟性があり、ほとんどの条件を満たすと考えられます。The previous functions are powerful and flexible and should satisfy almost all conditions. しかし、これらのメソッドでもニーズが満たされず、コード内で <xref:Microsoft.VisualStudio.TestTools.UITesting.Playback.Wait%2A> または Sleep をコード化する必要がある場合は、Thread.Sleep() API の代わりに Playback.Wait() を使用することをお勧めします。However, in case these methods do not satisfy your needs and you need to code either a <xref:Microsoft.VisualStudio.TestTools.UITesting.Playback.Wait%2A>, or a Sleep in your code, it is recommended that you use the Playback.Wait() instead of Thread.Sleep() API. これには次の理由があります。The reasons for this are:

<xref:Microsoft.VisualStudio.TestTools.UITesting.PlaybackSettings.ThinkTimeMultiplier%2A> プロパティを使用してスリープの継続時間を変更できます。You can use the <xref:Microsoft.VisualStudio.TestTools.UITesting.PlaybackSettings.ThinkTimeMultiplier%2A>property to modify the duration of sleep. 既定ではこの変数は 1 ですが、値を増減させてコード全体で待機時間を変更することができます。By default, this variable is 1 but you can increase or decrease it to change the wait time all over the code. たとえば、低速なネットワークで特別にテストを実行する場合や、その他のパフォーマンスが低下している状況で、特定の位置で (または構成ファイル内で) この変数を 1.5 に変更すると、あらゆる位置の待機時間を 50% 余分に追加できます。For example, if you are specifically testing over slow network, or some other slow performance case, you can change this variable at one place (or even in the configuration file) to 1.5 to add 50% extra wait at all places.

Playback.Wait() は、ユーザー取り消し/ブレーク操作の確認中に for ループ内の小さなチャンクで Thread.Sleep() を呼び出します (上記の計算後)。Playback.Wait() internally calls Thread.Sleep() (after above computation) in smaller chunks in a for-loop while checking for user cancel\break operation. つまり、Playback.Wait() を使用すると、スリープにならなかったり、例外が発生しても、待機が完了する前に再生を取り消すことができます。In other words, Playback.Wait() lets you cancel playback before the end of the wait whereas sleep might not or throw exception.

ヒント

コード化された UI テスト エディターを使用すると、コード化された UI テストを簡単に変更できます。The Coded UI Test Editor lets you easily modify your coded UI tests. Coded UI Test Editor (コード化された UI テスト エディター) を使用すると、テスト メソッドを検索、表示、および編集できます。Using the Coded UI Test Editor, you can locate, view, and edit your test methods. また、UI コントロール マップ内の UI 操作および関連コントロールを編集することもできます。You can also edit UI actions and their associated controls in the UI control map. 詳細については、「コード化された UI テスト エディターを使用したコード化された UI テストの編集」をご覧ください。For more information, see Editing Coded UI Tests Using the Coded UI Test Editor.

ガイダンスGuidance

追加情報については、「Visual Studio 2012 を使用した継続的配信のためのテスト - 第 5 章: システム テストの自動化」を参照してください。For additional information, see Testing for Continuous Delivery with Visual Studio 2012 - Chapter 5: Automating System Tests

関連項目See Also

UI オートメーションを使用してコードをテストする Use UI Automation To Test Your Code
コード化された UI テストを作成する Creating Coded UI Tests
チュートリアル: コード化された UI テストの作成、編集、および保守 Walkthrough: Creating, Editing and Maintaining a Coded UI Test
コード化された UI テストの構造 Anatomy of a Coded UI Test
コード化された UI テストと操作の記録でサポートされている構成とプラットフォーム Supported Configurations and Platforms for Coded UI Tests and Action Recordings
方法: コード化された UI テスト エディターを使用して UI アクションの前に遅延を挿入するHow to: Insert a Delay Before a UI Action Using the Coded UI Test Editor