共用方式為


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

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

UITestControl.WaitForControlXXX() 方法

UITestControl.WaitForControlXXX() 方法

描述

WaitForControlReady()

等候控制項準備就緒以接受滑鼠和鍵盤輸入。 引擎會針對所有動作隱含呼叫這個 API,以便等候控制項準備就緒,然後再進行任何作業。 不過,在某些難以理解情節中,您可能必須進行明確呼叫。

WaitForControlEnabled()

當精靈正透過呼叫伺服器,針對輸入進行某些非同步驗證時,等候控制項啟用。 例如,您可以使用方法來等候精靈的 [下一步] 按鈕啟用。 如需這個方法的範例,請參閱逐步解說:建立、編輯和維護自動程式碼 UI 測試

WaitForControlExist()

等候控制項出現在 UI 上。 例如,在應用程式完成參數的驗證之後,您預期會出現錯誤對話方塊。 驗證所花費的時間是可變的。 您可以使用這個方法來等候錯誤對話方塊。

WaitForControlNotExist()

等候控制項從 UI 中消失。 例如,您可以等候進度列消失。

WaitForControlPropertyEqual(String, Object)

等候控制項的指定屬性具有給定的值。 例如,您可以等候狀態文字變更為 [完成]。

WaitForControlPropertyNotEqual(String, Object)

等候控制項的指定屬性具有指定值的相反值。 例如,您可以等候編輯方塊變成非唯讀狀態,亦即,可編輯狀態。

WaitForControlCondition(Predicate<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);

WaitForCondition<T>(T, Predicate<T>)

上述所有方法都是 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 毫秒 (一分鐘)。

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

上述功能既強大且彈性,幾乎可滿足所有狀況。 不過,如果這些方法無法滿足您的需求,而且您需要在程式碼中編寫 Wait(Int32)Sleep(Int32),建議使用 Playback.Wait() 來取代 Thread.Sleep() API。 這樣做的原因包括:

  • 您可以使用 ThinkTimeMultiplier 屬性來修改休眠的持續時間。 根據預設,這個變數是 1,不過您可以增加或減少此值,以便變更整個程式碼的等候時間。 例如,如果您要特別在慢速網路上測試或是測試其他較低效能的案例,可以在單一位置 (甚至在組態檔中) 將此變數變更為 1.5,以便在所有位置增加 50% 的額外等候時間。

  • Playback.Wait() 會在 for 迴圈的較小區塊內部呼叫 Thread.Sleep() (上述計算之後),同時檢查使用者取消\中斷作業。 換言之,Playback.Wait() 可讓您在等候結束之前取消播放,而休眠可能無法這樣做,甚至擲回例外狀況。

注意事項注意事項

[自動程式碼 UI 測試編輯器] 可讓您輕鬆地修改自動程式碼 UI 測試。 您可以使用 [自動程式碼 UI 測試編輯器] 來找出、檢視和編輯測試方法。 您也可以在 UI 控制項對應中編輯 UI 動作及其相關聯的控制項。 [自動程式碼 UI 測試編輯器] 包含在 Microsoft Visual Studio 2010 Feature Pack 2 中。 若要下載此功能套件,您必須擁有 Visual Studio 2010 Ultimate、Visual Studio 2010 Premium 或 Test Professional 2010 以及 MSDN 訂閱、Microsoft BizSpark 或 MSDN Academic Alliance。 如需詳細資訊,請參閱使用自動程式碼 UI 測試編輯器,編輯自動程式碼 UI 測試Microsoft Visual Studio 2010 Feature Pack 2

請參閱

工作

HOW TO:建立自動程式碼 UI 測試

概念

使用自動化 UI 測試進行使用者介面測試

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

其他資源

逐步解說:建立、編輯和維護自動程式碼 UI 測試

自動程式碼 UI 測試的結構