開始使用UITest和 Xamarin.Forms

重要

Visual Studio App Center 已排定於 2025 年 3 月 31 日淘汰。 雖然您可以繼續使用 Visual Studio App Center,直到它完全淘汰為止,但有數個建議您考慮移轉至的建議替代方案。

深入瞭解支持時程表和替代方案。

UITest 可與 Xamarin.Forms 搭配使用,以撰寫 UI 測試,以在數百個裝置的雲端中執行。

概觀

App Center 測試 \(英文\) 可讓開發人員撰寫適用於 iOS 和 Android 應用程式的自動化使用者介面測試。 經過一些調整後,Xamarin.Forms 應用程式可使用 Xamarin.UITest 進行測試,包括共用相同的測試程式碼。 本文會介紹搭配使用 Xamarin.UITest 和 Xamarin.Forms 的特定提示。

本指南假設您已熟悉 Xamarin.UITest。 建議您參考下列指南以熟悉 Xamarin.UITest:

一旦將 UITest 專案加入到 Xamarin.Forms 解決方案之後,針對 Xamarin.Forms 應用程式撰寫和執行測試的步驟,將會和 Xamarin.Android 或 Xamarin.iOS 應用程式的步驟相同。

規格需求

請參閱 Xamarin.UITest 以確認您的專案已準備好進行自動化 UI 測試。

將UITest支援新增至 Xamarin.Forms 應用程式

UITest 會啟用畫面上的控制件,並在使用者通常會與應用程式互動的任何位置提供輸入,來自動化使用者介面。 為啟用可按下按鈕在方塊中輸入文字的測試,測試程式碼需要方法來識別畫面上的控制項。

若要讓 UITest 程式碼參考控制項,每個控制項都需要唯一識別碼。 在 Xamarin.Forms 中,設定此識別碼的建議方式是利用 AutomationId 屬性,如下所示:

var b = new Button {
    Text = "Click me",
    AutomationId = "MyButton"
};
var l = new Label {
    Text = "Hello, Xamarin.Forms!",
    AutomationId = "MyLabel"
};

也可以在 XAML 中設定 AutomationId 屬性:

<Button x:Name="b" AutomationId="MyButton" Text="Click me"/>
<Label x:Name="l" AutomationId="MyLabel" Text="Hello, Xamarin.Forms!" />

注意

AutomationIdBindableProperty,也可使用繫結運算式來設定。

測試需要的所有控制項 (包括按鈕、文字項目和其值可能需要進行查詢的標籤) 都應加入唯一的 AutomationId

警告

InvalidOperationException如果嘗試設定一次以上的 屬性ElementAutomationId將會擲回 。

iOS 應用程式專案

若要在 iOS 上執行測試,必須將 Xamarin Test Cloud Agent NuGet 套件 新增至專案。 新增之後,請將下列程式代碼 AppDelegate.FinishedLaunching 複製到 方法:

#if ENABLE_TEST_CLOUD
// requires Xamarin Test Cloud Agent
Xamarin.Calabash.Start();
#endif

「入口網站」元件使用非公用Apple API,這會導致應用程式遭到 App Store拒絕。 但如果未在程式碼中明確參考 Calabash 組件,則 Xamarin.iOS 連結器會從最終 IPA 中移除它。

注意

根據預設,發行組建沒有 ENABLE_TEST_CLOUD 編譯程式變數,這會導致從應用程式套件組合中移除該元件。 不過,偵錯組建預設會定義編譯程式指示詞,以防止連結器移除元件。

下列螢幕擷取畫面顯示針對偵錯組建設定的 ENABLE_TEST_CLOUD 編譯器變數:

Visual Studio 建置選項中的條件式編譯符號選項

Android 應用程式專案

不同於 iOS,Android 專案不需要任何特殊的啟動程式代碼。

撰寫 UITest

如需撰寫 UITest 的資訊,請參閱 UITest 文件 \(英文\)。 下列步驟為摘要,具體說明建置 Xamarin.Forms 示範 UsingUITest 的方式。

在 Xamarin.Forms UI 中使用 AutomationId

Xamarin.Forms 應用程式使用者介面必須處於可撰寫指令碼的狀態,才可以撰寫任何 UITest。 請確定使用者介面中的所有控制項都具有 AutomationId,以在測試程式碼中參考它們。

在 UITest 中參考 AutomationId

撰寫 UITest 時,AutomationId 值會在每個平台上以不同的方式公開:

  • iOS 會使用 id 欄位。
  • Android 會使用 label 欄位。

若要撰寫會在 iOS 和 Android 上尋找 AutomationId 的跨平台 UITest,請使用 Marked 測試查詢:

app.Query(c=>c.Marked("MyButton"))

較短形式的 app.Query("MyButton") 也適用。

將UITest專案新增至現有的解決方案

Visual Studio 有提供範本,以協助將 Xamarin.UITest 專案加入到現有的 Xamarin.Forms 方案:

  1. 以滑鼠右鍵按兩下方案,然後選取 [ 檔案 > 新專案]。

  2. 從 [Visual C#] 範本中選取 [測試] 類別。 選取 UI 測試應用程式 > 跨平台 範本:

    新增專案新增

    此步驟會將具有 NUnitXamarin.UITestNUnitTestAdapter NuGet 套件的新專案新增至解決方案:

    NuGet 套件管理員 NuGet

    NUnitTestAdapter 是第三方測試執行器,可讓 Visual Studio 從 Visual Studio 執行 NUnit 測試。

    新專案也包含兩個類別。 AppInitializer 包含程式碼,可協助初始化和設定測試。 另一個類別 Tests 包含未定案程式碼,可協助開始 UITest。

  3. 將來自 UITest 專案的專案參考加入到 Xamarin.Android 專案:

    項目參考管理員項目

    此步驟可讓 NUnitTestAdapter 從 Visual Studio 執行 Android 應用程式的 UITests。

將 Xamarin.UITest 新增至 Xamarin.Forms 解決方案之後,就可以建立 UITests、在本機執行,並將其提交至 App Center 測試。

摘要

透過簡單的機制將 AutomationId 公開為測試自動化的唯一檢視識別碼,就能輕鬆使用 Xamarin.UITest 來測試 Xamarin.Forms 應用程式。 一旦將 UITest 專案加入到 Xamarin.Forms 解決方案之後,針對 Xamarin.Forms 應用程式撰寫和執行測試的步驟,將會和 Xamarin.Android 或 Xamarin.iOS 應用程式的步驟相同。

如需如何將測試提交至 App Center 測試的詳細資訊,請參閱 提交 Xamarin.Android 的 UITests提交 Xamarin.iOS 的 UITests。 如需 UITest 的詳細資訊,請參閱 App Center 測試文件 \(英文\)。