共用方式為


讓自動程式碼 UI 測試在播放期間等候特定事件

在自動程式碼 UI 測試播放中,您可以指示測試等候系統發生特定事件,例如視窗顯示、進度列消失等等。 若要這樣做,請使用適當的 UITestControl.WaitForControlXXX() 方法,如下表所述。 如需使用 WaitForControlEnabled 方法來等候控制項啟用之自動程式碼 UI 測試的範例,請參閱逐步解說:建立、編輯和維護自動程式碼 UI 測試

需求

  • Visual Studio Ultimate, Visual Studio Premium

提示

您可以使用 [自動程式碼 UI 測試編輯器]在動作前加入延遲。如需詳細資訊,請參閱HOW TO:使用自動程式碼 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 條件)。 例如,您可以等候直到狀態文字成為 SucceededFailed 為止,如下列程式碼所示:

// 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 條件)。 例如,您可以等候直到狀態文字成為 Succeeded 或顯示錯誤訊息為止,如下列程式碼所示:

// 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 毫秒 (一分鐘)。

  • 這些方法具有接受明確逾時 (以毫秒為單位) 的多載。 不過,當等候作業產生控制項的隱含搜尋或應用程式忙碌中時,實際的等候時間可能會超過指定的逾時。

上述功能既強大且彈性,幾乎可滿足所有狀況。 不過,如果這些方法無法滿足您的需求,而且您需要在程式碼中編寫 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 測試

HOW TO:使用自動程式碼 UI 測試編輯器,在 UI 動作前插入延遲

概念

使用自動程式碼使用者介面測試來驗證程式碼

自動程式碼 UI 測試的結構

自動程式碼 UI 測試和動作記錄的支援組態和平台

其他資源

建立自動程式碼 UI 測試