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-png
adlandı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 TextView
yö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.