Referensi cepat Xamarin.UITest
Penting
Visual Studio App Center dijadwalkan untuk dihentikan pada 31 Maret 2025. Meskipun Anda dapat terus menggunakan Visual Studio App Center hingga sepenuhnya dihentikan, ada beberapa alternatif yang direkomendasikan yang dapat Anda pertimbangkan untuk bermigrasi.
Pelajari selengkapnya tentang garis waktu dukungan dan alternatif.
Dokumen ini adalah lembar contekan yang mengembun beberapa informasi UITest untuk referensi cepat, berisi topik berikut:
Tes Penulisan
Cuplikan ini adalah boilerplate TestFixture
untuk kelas pengujian pada satu platform:
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
}
}
Untuk solusi yang melibatkan Android dan iOS, kode berikut akan membantu menulis UITest lintas platform.
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);
}
}
}
Solusi Xamarin.Forms harus mengikuti instruksi yang dijelaskan dalam panduan Mengotomatiskan pengujian Xamarin.Forms dengan Xamarin.UITest dan App Center.
Menginisialisasi Xamarin.UITest di iOS
Tambahkan cuplikan berikut ke FinishedLaunching
metode kelas AppDelegate :
#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 Agent menggunakan API Apple non-publik, yang menyebabkan aplikasi ditolak oleh App Store. Tautan Xamarin.iOS akan menghapus Xamarin Test Cloud Agent dari IPA akhir jika tidak secara eksplisit dirujuk di mana saja oleh kode. Build rilis tidak memiliki ENABLE_TEST_CLOUD
variabel pengkompilasi, yang menyebabkan Xamarin Test Cloud Agent dihapus dari app bundle. Build debug memiliki direktif kompilator yang ditentukan, mencegah linker menghapus Xamarin Test Cloud Agent.
Menentukan ID Perangkat untuk Simulator iOS
Anda dapat menentukan UUID untuk simulator iOS di komputer, menggunakan perintah seperti yang instruments
ditunjukkan di bawah ini:
$ 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]
Memulai Instans Simulator iOS
Anda dapat menjalankan UITests pada versi dan simulator iOS tertentu dengan menggunakan ID perangkat.
const string simId = "3F1C286F-3D5D-47B2-92B8-66B673BD0236"; //iPhone 5s (8.1 Simulator)
app = ConfigureApp.iOS.DeviceIdentifier(simId).StartApp();
Mengatur ulang Simulator iOS ke Default Pabrik
Cuplikan kode ini dapat digunakan untuk menghentikan simulator iOS tertentu dan mengatur ulang kembali ke default pabrik:
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();
}
Cuplikan Kode
Bagian ini akan menyediakan beberapa cuplikan kode yang dapat membantu untuk menulis UITests.
Elemen Kueri Berdasarkan Nilai Properti
//Finds all elements that have a "hint" property with a value of "Search"
app.Query(e => e.All().Property("hint", "Search"));
Aktifkan Cuplikan Layar Secara Lokal
app = ConfigureApp.Android
.EnableLocalScreenshots()
.StartApp();
Contoh kode di atas menempatkan cuplikan layar di direktori tempat assembly pengujian berada, penamaan gambar screenshot-X-png
.
Memanggil Metode pada AppResult atau Elemen UI
Dimungkinkan untuk menjalankan metode asli pada tampilan yang mendasar dengan AppQuery.Invoke
metode . Metode yang dipanggil harus cocok dengan nama metode asli, bukan nama metode C#. Misalnya, untuk memanggil setGravity
metode di Android TextView
:
app.Query(e => e.Id("userName").Invoke("setGravity", 1)); //center text
menggunakan Invoke
metode Java TextView.setGravity
dan bukan properti C# TextView.Gravity .
Menangani izin Android
ConfigureApp.Android.Debug().ApkFile(apkpath).StartApp()
Jika Anda menginstal menggunakan .ApkFile(apkpath)
alih-alih PreferIdeSettings()
, maka aplikasi diberikan izin "semua", yang menghapus pop-up izin. Dalam metode , .ApkFile(apkpath)
apkpath
harus menunjuk ke file apk yang dikompilasi.