Ś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.