次の方法で共有


UITest と Xamarin.Forms の概要

重要

Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。

サポートタイムラインと代替方法の詳細をご確認ください

UITest を Xamarin.Forms と共に使用して、何百ものデバイスでクラウドで実行する UI テストを記述できます。

概要

App Center Test を利用すると、開発者は iOS アプリと Android アプリのために自動化されたユーザー インターフェイス テストを記述できます。 同じテスト コードの共有など、若干の微調整を行うことで Xamarin.Forms アプリを Xamarin.UITest でテストできます。 この記事では、Xamarin.Forms で Xamarin.UITest を利用するためのヒントを紹介します。

このガイドは、Xamarin.UITest の知識を前提としています。 Xamarin.UITest に関する知識を得る場所として次のガイドを推奨しています。

UITest プロジェクトを Xamarin.Forms ソリューションに追加すると、Xamarin.Forms アプリケーションのテストを記述し、実行するための手順が Xamarin.Android または Xamarin.iOS アプリケーションの場合と同じになります。

要件

プロジェクトが 自動化された UI テストの準備ができているかどうかを確認するには、Xamarin.UITest を参照してください。

Xamarin.Forms アプリへの UITest サポートの追加

UITest は、画面上のコントロールをアクティブ化し、ユーザーが通常アプリケーションと対話する任意の場所で入力を提供することで、ユーザー インターフェイスを自動化します。 ボタンを押すか、ボックスにテキストを入力するテストを有効にするには、画面上のコントロールを特定する方法をテスト コードに与える必要があります。

コントロールを参照する UITest コードを有効にするには、各コントロールに一意の識別子を与える必要があります。 Xamarin.Forms では、この識別子を設定する推奨方法は、下の画像のように AutomationId プロパティを使用することです。

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

AutomationId プロパティも XAML に設定できます。

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

Note

AutomationIdBindableProperty であり、バインディング式と設定することもできます。

テストに必要なあらゆるコントロールを一意の AutomationId に追加してください (ボタン、テキスト エントリ、値を問い合わせる可能性があるラベルなど)。

警告

複数回 InvalidOperationException のプロパティの設定 AutomationId が試行されると、An Element がスローされます。

iOS アプリケーション プロジェクト

iOS でテストを実行するには、 Xamarin Test Cloud Agent NuGet パッケージ をプロジェクトに追加する必要があります。 追加されたら、次のコードをメソッドに AppDelegate.FinishedLaunching コピーします。

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

Calabash アセンブリでは、パブリックではない Apple API が使用されるため、アプリは App Store によって拒否されます。 しかしながら、明示的にコードから参照されていないのであれば、Xamarin.iOS リンカーが最終 IPA から Calabash アセンブリを削除します。

Note

既定では、リリース ビルドには ENABLE_TEST_CLOUD コンパイラ変数がないため、Calabash アセンブリがアプリ バンドルから削除されます。 ただし、デバッグ ビルドにはコンパイラ ディレクティブが既定で定義されています。これにより、リンカーはアセンブリを削除できなくなります。

次のスクリーンショットでは、デバッグ ビルドに設定されている ENABLE_TEST_CLOUD コンパイラ変数を確認できます。

Android アプリケーション プロジェクト

iOS とは異なり、Android プロジェクトには特別なスタートアップ コードは必要ありません。

UITests を記述する

UITests を記述する方法については、UITest ドキュメントを参照してください。

Xamarin.Forms UI の AutomationId を使用する

UITests を記述するには、Xamarin.Forms アプリケーション ユーザー インターフェイスをスクリプト実行可能にする必要があります。 テスト コードで参照できるように、ユーザー インターフェイスのすべてのコントロールに AutomationId を与えます。

UITests の AutomationId を参照する

UITests を記述するとき、AutomationId 値はプラットフォームごとに異なる方法で公開されます。

  • iOSid フィールドを使用します。
  • Androidlabel フィールドを使用します。

iOS と Android の両方で AutomationId を見つけるプラットフォーム非依存 UITests を記述するには、Marked テスト クエリを使用します。

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

省略形 app.Query("MyButton") も機能します。

既存のソリューションへの UITest プロジェクトの追加

Visual Studio には、Xamarin.UITest プロジェクトを既存の Xamarin.Forms ソリューションに追加するためのテンプレートがあります。

  1. ソリューションを右クリックし、[新しいプロジェクトのファイル>] を選択します

  2. Visual C# テンプレートから、テスト カテゴリを選択します。 UI テスト アプリ>のクロスプラットフォーム テンプレートを選択します。

    新しいプロジェクトを追加する

    この手順では、NUnit、Xamarin.UITestおよび NUnitTestAdapter NuGet パッケージを含む新しいプロジェクトをソリューションに追加します。

    NuGet パッケージ マネージャー

    NUnitTestAdapter は、Visual Studio が Visual Studio から NUnit テストを実行できるようにするサード パーティ製のテスト ランナーです。

    新しいプロジェクトには 2 つのクラスも含まれています。 AppInitializer には、テストを初期化し、セットアップするコードが含まれています。 もう 1 つのクラスである Tests は、UITests を起動させるスケルトン コードが含まれています。

  3. UITest プロジェクトから Xamarin.Android プロジェクトにプロジェクト参照を追加します。

    プロジェクト参照マネージャー

    この手順により、 NUnitTestAdapter は Visual Studio から Android アプリの UITests を実行できます。

Xamarin.UITest を Xamarin.Forms ソリューションに追加した後、UITest を作成し、ローカルで実行し、App Center Test に送信することができます。

まとめ

Xamarin.Forms アプリケーションは、テスト自動化のための一意の表示 ID として AutomationId を公開する単純なメカニズムを利用し、Xamarin.UITest で簡単にテストできます。 UITest プロジェクトを Xamarin.Forms ソリューションに追加すると、Xamarin.Forms アプリケーションのテストを記述し、実行するための手順が Xamarin.Android または Xamarin.iOS アプリケーションの場合と同じになります。

App Center テストにテストを送信する方法については、「Xamarin.Android 用の UITest の提出」または「Xamarin.iOS 用 UITests の提出」を参照してください。 UITest の詳細については、App Center Test のドキュメントを参照してください。