Bagikan melalui


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.