Udostępnij za pośrednictwem


Ściągawka narzędzia Xamarin.UITest

Ważne

Program Visual Studio App Center ma zostać wycofany 31 marca 2025 r. Chociaż możesz nadal używać programu Visual Studio App Center do momentu jego pełnego wycofania, istnieje kilka zalecanych alternatyw, do których można rozważyć migrację.

Dowiedz się więcej o osiach czasu pomocy technicznej i alternatywach.

Ten dokument jest ściągawką, która kondensuje niektóre informacje dotyczące narzędzia UITest, aby uzyskać szybką dokumentację, zawiera następujące tematy:

Pisanie testów

Ten fragment kodu jest standardowy TestFixture dla klasy testowej na jednej platformie:

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
    }
}

W przypadku rozwiązań obejmujących systemy Android i iOS poniższy kod pomoże w pisaniu wieloplatformowych testów interfejsu użytkownika.

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);
        }
    }
}

Rozwiązania platformy Xamarin.Forms powinny postępować zgodnie z instrukcjami opisanymi w przewodniku Automatyzowanie testowania zestawu narzędzi Xamarin.Forms za pomocą narzędzi Xamarin.UITest i App Center.

Inicjowanie narzędzia Xamarin.UITest w systemie iOS

Dodaj następujący fragment kodu do FinishedLaunching metody klasy 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

Agent Xamarin Test Cloud Agent używa niepublikowych interfejsów API firmy Apple, co powoduje odrzucenie aplikacji przez App Store. Konsolidator Xamarin.iOS usunie agenta chmury Xamarin Test z końcowego adresu IPA, jeśli nie zostanie jawnie przywołyny w dowolnym miejscu przez kod. Kompilacje wydania nie mają zmiennej ENABLE_TEST_CLOUD kompilatora, co powoduje usunięcie agenta chmury Xamarin Test z pakietu aplikacji. Kompilacje debugowania mają zdefiniowaną dyrektywę kompilatora, co uniemożliwia konsolidatorowi usunięcie agenta Xamarin Test Cloud Agent.

Określanie identyfikatora urządzenia dla symulatora systemu iOS

Możesz określić identyfikator UUID symulatorów systemu iOS na komputerze, użyj instruments polecenia , jak pokazano poniżej:

$ 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]

Uruchamianie wystąpienia symulatora systemu iOS

Testy interfejsu użytkownika można uruchamiać w określonej wersji systemu iOS i symulatorze przy użyciu identyfikatora urządzenia.

const string simId = "3F1C286F-3D5D-47B2-92B8-66B673BD0236"; //iPhone 5s (8.1 Simulator)
app = ConfigureApp.iOS.DeviceIdentifier(simId).StartApp();

Resetowanie domyślnych ustawień fabrycznych symulatora systemu iOS

Ten fragment kodu może służyć do zatrzymywania danego symulatora systemu iOS i resetowania go z powrotem do domyślnych ustawień fabrycznych:

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();
}

Wstawki kodu

Ta sekcja zawiera fragmenty kodu, które mogą być przydatne podczas pisania testów interfejsu użytkownika.

Wykonywanie zapytań o elementy na podstawie wartości właściwości

//Finds all elements that have a "hint" property with a value of "Search"
app.Query(e => e.All().Property("hint", "Search"));

Włączanie zrzutów ekranu lokalnie

app = ConfigureApp.Android
    .EnableLocalScreenshots()
    .StartApp();

Powyższy przykład kodu umieszcza zrzuty ekranu w katalogu, w którym znajduje się zestaw testowy, nazewnictwo obrazu screenshot-X-png.

Wywoływanie metody dla elementu AppResult lub UI

Istnieje możliwość wykonywania metod natywnych w widokach bazowych za pomocą AppQuery.Invoke metody . Wywołana metoda musi być zgodna z nazwą metody natywnej, a nie nazwą metody języka C#. Aby na przykład wywołać metodę setGravity w systemie Android TextView:

app.Query(e => e.Id("userName").Invoke("setGravity", 1)); //center text

Używa Invoke metody Java TextView.setGravity , a nie właściwości TextView.Gravity języka C#.

Obsługa uprawnień systemu Android

ConfigureApp.Android.Debug().ApkFile(apkpath).StartApp()

Jeśli instalujesz polecenie .ApkFile(apkpath) zamiast PreferIdeSettings(), aplikacja zostanie udzielona z uprawnieniami "wszystkie", które usuwają wyskakujące okienka uprawnień. W metodzie .ApkFile(apkpath)apkpath należy wskazać skompilowany plik apk.