Xamarin.UITest チート シート
重要
Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。
このドキュメントは、クイック リファレンスのためにいくつかの UITest 情報を要約するチート シートであり、次のトピックが含まれています。
テストの作成
このスニペットは、1 つのプラットフォーム上のテスト クラスの定型句 TestFixture
です。
using System;
using NUnit.Framework;
using Xamarin.UITest;
using Xamarin.UITest.Android;
using Xamarin.UITest.Queries;
namespace MyApp.MyUITests
{
[TestFixture]
public class Tests
{
IApp app;
[SetUp]
public void BeforeEachTest()
{
// Uncomment the line that's appropriate for the platform:
// app = ConfigureApp.Android.StartApp();
// app = ConfigureApp.iOS.StartApp();
}
// Test cases here
}
}
Android と iOS の両方に関連するソリューションの場合、次のコードはクロス プラットフォーム UITests の記述に役立ちます。
using System;
using NUnit.Framework;
using Xamarin.UITest;
using Xamarin.UITest.Queries;
namespace MyApp.MyCrossPlatformUITests
{
public class AppInitializer
{
public static IApp StartApp(Platform platform)
{
if(platform == Platform.Android)
{
return ConfigureApp.Android.StartApp();
}
return ConfigureApp.iOS.StartApp();
}
}
[TestFixture(Platform.Android)]
[TestFixture(Platform.iOS)]
public class Tests
{
IApp app;
Platform platform;
public Tests(Platform platform)
{
this.platform = platform;
}
[SetUp]
public void BeforeEachTest()
{
app = AppInitializer.StartApp(platform);
}
}
}
Xamarin.Forms ソリューションは、ガイド「 Xamarin.UITest と App Center を使用した Xamarin.Forms テストの自動化」で説明されている手順に従う必要があります。
iOS での Xamarin.UITest の初期化
AppDelegate クラスの メソッドにFinishedLaunching
次のスニペットを追加します。
#region Code for starting up the Xamarin Test Cloud Agent
// Newer version of Visual Studio for Mac and Visual Studio provide the
// ENABLE_TEST_CLOUD compiler directive to prevent the Calabash DLL from
// being included in the released version of the application.
#if ENABLE_TEST_CLOUD
Xamarin.Calabash.Start();
#endif
#endregion
Xamarin Test Cloud エージェントでは、パブリックではない Apple API が使用されるため、アプリはApp Storeによって拒否されます。 Xamarin.iOS リンカーは、コードによって明示的に参照されていない場合、最終的な IPA から Xamarin Test Cloud エージェントを削除します。 リリース ビルドには ENABLE_TEST_CLOUD
コンパイラ変数がないため、Xamarin Test Cloud Agent がアプリ バンドルから削除されます。 デバッグ ビルドにはコンパイラ ディレクティブが定義されており、リンカーが Xamarin Test Cloud エージェントを削除できないようにします。
iOS シミュレーターのデバイス ID を確認する
コンピューター上の iOS シミュレーターの UUID を確認できます。次に示すように コマンドを instruments
使用します。
$ xcrun xctrace list devices
Known Devices:
bushmaster [5A4B28A1-392A-59FB-81C5-137E881D61E9]
Resizable iPad (8.1 Simulator) [B3BF8A06-2938-4B74-BF87-16C223F8690C]
Resizable iPhone (8.1 Simulator) [E712409B-CFCC-409A-8162-627B6254EB3C]
iPad 2 (7.1 Simulator) [E8572F8F-227B-4DB0-8C92-590DC770360D]
iPad 2 (8.1 Simulator) [1F425263-3F96-4DAB-B843-0D041C3C71EA]
iPad Air (7.1 Simulator) [2863AFF6-D9FC-45E8-8385-E2A548F19002]
iPad Air (8.1 Simulator) [BBCF5CF2-20A4-4C47-9FA5-EBFF7311B071]
iPad Retina (7.1 Simulator) [B7CBB024-E1D3-4B24-8C20-3E9F7B54CF61]
iPad Retina (8.1 Simulator) [3E21ECD3-397A-4251-AEB6-2ADCF29AEE89]
iPhone 4s (7.1 Simulator) [D36354DD-D6A3-4E08-A25B-276620D844B8]
iPhone 4s (8.1 Simulator) [5C8FE602-8BA7-494D-A113-66C8B9AB3CB7]
iPhone 5 (7.1 Simulator) [C696E83D-F9FE-4DBC-8C67-FA0FC533246E]
iPhone 5 (8.1 Simulator) [9A8A5D92-A7D9-4A3C-81AA-97A9924F7D09]
iPhone 5s (7.1 Simulator) [6CDF5B5C-A315-4A8C-9D38-29437FE59C6D]
iPhone 5s (8.1 Simulator) [3F1C286F-3D5D-47B2-92B8-66B673BD0236]
iPhone 6 (8.1 Simulator) [995FF713-9DE4-460B-800E-F5A20FD93AA7]
iPhone 6 Plus (8.1 Simulator) [AB1C20F6-BFFC-4C80-879C-F19A7E3F0B5C]
iOS シミュレーター インスタンスの起動
デバイス ID を使用して、特定の iOS バージョンとシミュレーターで UITests を実行できます。
const string simId = "3F1C286F-3D5D-47B2-92B8-66B673BD0236"; //iPhone 5s (8.1 Simulator)
app = ConfigureApp.iOS.DeviceIdentifier(simId).StartApp();
iOS シミュレーターを工場出荷時の既定値にリセットする
このコード スニペットを使用して、特定の iOS シミュレーターを停止し、工場出荷時の既定値にリセットできます。
static void ResetSimulator(string deviceId)
{
var shutdownCmdLine = string.Format("simctl shutdown {0}", deviceId);
var shutdownProcess = Process.Start("xcrun", shutdownCmdLine);
shutdownProcess.WaitForExit();
var eraseCmdLine = string.Format("simctl erase {0}", deviceId);
var eraseProcess = Process.Start("xcrun", eraseCmdLine);
eraseProcess.WaitForExit();
}
コード スニペット
このセクションでは、UITests の記述に役立つコード スニペットをいくつか示します。
プロパティ値に基づく要素のクエリ
//Finds all elements that have a "hint" property with a value of "Search"
app.Query(e => e.All().Property("hint", "Search"));
ローカルでスクリーンショットを有効にする
app = ConfigureApp.Android
.EnableLocalScreenshots()
.StartApp();
上記のコード例では、テスト アセンブリがあるディレクトリにスクリーンショットを配置し、イメージに という名前を付けます screenshot-X-png
。
AppResult または UI 要素でメソッドを呼び出す
メソッドを使用して、基になるビューでネイティブ メソッドを AppQuery.Invoke
実行できます。 呼び出されるメソッドは、C# メソッド名ではなく、ネイティブ メソッド名と一致する必要があります。 たとえば、Android TextView
で メソッドをsetGravity
呼び出すには、
app.Query(e => e.Id("userName").Invoke("setGravity", 1)); //center text
ではInvoke
、C# TextView.Gravity プロパティではなく Java TextView.setGravity
メソッドが使用されます。
Android のアクセス許可の処理
ConfigureApp.Android.Debug().ApkFile(apkpath).StartApp()
のPreferIdeSettings()
代わりに を使用して.ApkFile(apkpath)
インストールすると、アプリに "すべて" のアクセス許可が付与され、アクセス許可のポップアップが削除されます。 メソッドでは、 .ApkFile(apkpath)
apkpath
はコンパイル済みの apk ファイルを指す必要があります。