Dil

MSTest UI Otomasyonu ile Windows masaüstü uygulamalarını test etme

Önizleme MSTest.Windows.UIAutomation paketi, MSTest yaşam döngüsü yönetimini yerleşik Windows UI Otomasyonu API'siyle tümleştirir. Paketlenmemiş bir tam güvenilir masaüstü uygulamasını başlatmak, pencerelerinden birini AutomationElement olarak bulmak ve her testten sonra uygulamayı durdurmak için bunu kullanın.

Paket, etkileşimli bir Windows oturumunda Win32, Windows Forms ve WPF uygulamalarını destekler. MSIX, UWP veya WinUI etkinleştirmesi, yükseltilmiş işlem otomasyonu, başsız masaüstü, bulucular, otomatik beklemeler, ekran görüntüleri veya çok pencereli nesne modeli sağlamaz.

Important

Bu özellik için MSTest 4.5 önizleme paketleri ve Windows’a özgü bir hedef çerçeve gerekir.

Windows UI Otomasyonu'ı etkinleştirin

MSTest.Sdk ile EnableWindowsUIAutomation öğesini true olarak ayarlayın:

<Project Sdk="MSTest.Sdk/4.5.0">
  <PropertyGroup>
    <TargetFramework>net8.0-windows</TargetFramework>
    <EnableWindowsUIAutomation>true</EnableWindowsUIAutomation>
  </PropertyGroup>
</Project>

MSTest.Sdk eşleşen MSTest.Windows.UIAutomation paketi ekler. MSTest.Sdk olmadan, MSTest.Windows.UIAutomationeşleşen MSTest sürümlerinde , MSTest.TestFrameworkve MSTest.TestAdapter başvurularını yapın. VSTest sürüm satırını izlediği için, uyumlu bir Microsoft.NET.Test.Sdk sürümünü ayrı olarak belirtin.

Linux veya macOS üzerinde geri yüklenen ya da derlenen Windows hedefli bir proje için true değerini EnableWindowsTargeting olarak ayarlayın.

Temel sınıf seçme

Şu sınıflardan birinden türet:

  • ApplicationTest her test öncesinde uygulamayı başlatır ve elden çıkarma sırasında durdurur. Yürütülebilir dosyayı tanımlamak için CreateProcessStartInfo öğesini geçersiz kılın.
  • WindowTest ayrıca bir pencere bekler ve bunu MainWindow aracılığıyla sunar.

MSTest test sınıfı öznitelikleri devralınmadığı için STATestClass öğesini her bir somut test sınıfında doğrudan bildirin:

using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Windows.UIAutomation;

[STATestClass]
public sealed class MyAppTests : WindowTest
{
    protected override ProcessStartInfo CreateProcessStartInfo()
        => new(@"C:\MyApp\MyApp.exe");
}
Imports System.Diagnostics
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports Microsoft.VisualStudio.TestTools.UnitTesting.Windows.UIAutomation

<STATestClass>
Public NotInheritable Class MyAppTests
    Inherits WindowTest

    Protected Overrides Function CreateProcessStartInfo() As ProcessStartInfo
        Return New ProcessStartInfo("C:\MyApp\MyApp.exe")
    End Function
End Class

Windows UI Otomasyonu desenlerini sorgulamak veya çağırmak için test yöntemlerinizde kullanınMainWindow. Paket, UIA2 System.Windows.Automation API'sini kullanır. Daha zengin öğe etkileşimlerine ihtiyaç duyduğunuzda, açığa sunulan AutomationElement üzerine FlaUI gibi başka bir kitaplık katmanlayabilirsiniz.

Başlangıç ve pencere bulmayı özelleştirme

Varsayılanlar uygulamanıza uymadığında bu üyeleri geçersiz kılın:

  • ApplicationShutdownTimeout temel sınıfın sorunsuz kapatma ve zorla sonlandırma için ne kadar süre bekleyeceğini belirler. Varsayılan değer beş saniyedir.
  • WindowDiscoveryTimeout, WindowTest öğesinin bir pencereyi ne kadar süre bekleyeceğini belirler. Varsayılan değer 10 saniyedir.
  • FindWindow başlatıcı işlemi kullanan, giriş ekranı gösteren veya birden çok üst düzey pencere oluşturan uygulamalar için bir pencere seçer.
  • StopApplication Seçilen pencere başlatılan işlem dışında CreateProcessStartInfo bir işleme ait olduğunda uygulamayı kapatır.

Temel sınıflar, başlatma ve pencere keşfi sırasında TestContext.CancellationToken öğesini izler. WindowTest, bir pencere görünmeden önce uygulama sonlandığında veya algılama zaman aşımına ulaştığında başarısız olur.

Yaşam döngüsü davranışını anlama

ApplicationTest her test çağrısı için bir uygulama işlemi başlatır. WindowTest işlem başladıktan sonra pencereyi bulur. Test ve ilgili temizleme yöntemleri tamamlandıktan sonra MSTest temel sınıfı serbest bırakır, ana pencere üzerinden uygulamanın normal şekilde kapanmasını ister ve uygulama yapılandırılmış zaman aşımı süresi içinde kapanmazsa işlem ağacını sonlandırır.

Parametreli testler ve yeniden denemeler için her çağrı kendi uygulama yaşam döngüsünü alır.

Ayrıca bakınız