Xamarin.UITest bilgi sayfası

Önemli

Visual Studio App Center 31 Mart 2025'te kullanımdan kaldırılıyor. Tamamen kullanımdan kaldırılana kadar Visual Studio App Center'ı kullanmaya devam edebilirsiniz ancak geçiş yapmayı düşünebileceğiniz birkaç önerilen alternatif vardır.

Destek zaman çizelgeleri ve alternatifleri hakkında daha fazla bilgi edinin.

Bu belge, hızlı başvuru için bazı UITest bilgilerini daraltan bir bilgi sayfasıdır ve aşağıdaki konuları içerir:

Test Yazma

Bu kod parçacığı, tek bir TestFixture platformda test sınıfı için ortak bir özelliktir:

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

Hem Android hem de iOS ile ilgili çözümler için aşağıdaki kod platformlar arası UITest yazma konusunda yardımcı olacaktır.

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 çözümleri, Xamarin.UITest ve App Center ile Xamarin.Forms testini otomatikleştirme kılavuzunda açıklanan yönergeleri izlemelidir.

iOS'ta Xamarin.UITest Başlatılıyor

AppDelegate sınıfının yöntemine FinishedLaunching aşağıdaki kod parçacığını ekleyin:

#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 Bulut Aracısı, uygulamaların App Store tarafından reddedilmesine neden olan genel olmayan Apple API'lerini kullanır. Xamarin.iOS bağlayıcısı, kod tarafından herhangi bir yere açıkça başvurulmazsa Xamarin Test Bulut Aracısı'nı son IPA'dan kaldırır. Yayın derlemelerinde derleyici değişkeni yoktur ENABLE_TEST_CLOUD ve bu da Xamarin Test Bulutu Aracısı'nın uygulama paketinden kaldırılmasına neden olur. Hata ayıklama derlemelerinde derleyici yönergesi tanımlanmıştır ve bağlayıcının Xamarin Test Bulut Aracısı'nı kaldırmasını engeller.

iOS Simülatörü için Cihaz Kimliğini Belirleme

Bir bilgisayardaki iOS simülatörleri için UUID'yi belirleyebilirsiniz, aşağıda gösterildiği gibi komutunu kullanın 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 Simulator Örneğini Başlatma

Cihaz kimliğini kullanarak UITests'i belirli bir iOS sürümünde ve simülatöründe çalıştırmak mümkündür.

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

iOS Simülatörünü Fabrika Varsayılanlarına Sıfırlama

Bu kod parçacığı, belirli bir iOS simülatörünü durdurmak ve fabrika varsayılanlarına sıfırlamak için kullanılabilir:

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

Kod Parçacıkları

Bu bölümde, UITests yazmada yardımcı olabilecek bazı kod parçacıkları sağlanacaktır.

Özellik Değerine Göre Öğeleri Sorgulama

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

Ekran Görüntülerini Yerel Olarak Etkinleştirme

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

Yukarıdaki kod örneği, ekran görüntülerini test derlemesinin bulunduğu dizine yerleştirir ve görüntüyü screenshot-X-pngadlandırmaktadır.

AppResult veya UI Öğesinde Yöntem Çağırma

yöntemiyle AppQuery.Invoke temel alınan görünümlerde yerel yöntemler yürütmek mümkündür. Çağrılan yöntemin C# yöntemi adıyla değil yerel yöntem adıyla eşleşmesi gerekir. Örneğin, bir Android'de TextViewyöntemini çağırmak setGravity için:

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

CInvoke# TextView.Gravity özelliğini değil Java TextView.setGravity yöntemini kullanır.

Android izinlerini işleme

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

yerine PreferIdeSettings()kullanarak .ApkFile(apkpath) yüklerseniz, uygulamaya izin açılır pencerelerini kaldıran "tümü" izinleri verilir. yönteminde .ApkFile(apkpath) derlenmiş apkpath apk dosyasına işaret etmelidir.