Jazyk

Testování desktopových aplikací Windows pomocí MSTest model UI Automation

Balíček Preview MSTest.Windows.UIAutomation integruje správu životního cyklu MSTest s integrovaným rozhraním API pro Windows model UI Automation. Použijte ho ke spuštění desktopové aplikace bez balíčku s plnou důvěrou, vyhledejte jedno z jejích oken jako AutomationElement a po každém testu aplikaci ukončete.

Balíček podporuje aplikace Win32, model Windows Forms a WPF (Windows Presentation Foundation) v interaktivní relaci systému Windows. Neposkytuje aktivaci MSIX, UWP ani WinUI, automatizaci procesů se zvýšenými oprávněními, bezobslužnou pracovní plochu, lokátory, automatické čekání, snímky obrazovky ani objektový model s více okny.

Important

Tato funkce vyžaduje balíčky MSTest 4.5 Preview a cílovou architekturu specifickou pro Windows.

Povolení Windows model UI Automation

Se sadou MSTest.Sdk nastavte EnableWindowsUIAutomation na true:

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

MSTest.Sdk přidá odpovídající MSTest.Windows.UIAutomation balíček. Bez MSTest.Sdk odkazujte na MSTest.Windows.UIAutomation, MSTest.TestFramework a MSTest.TestAdapter v odpovídajících verzích MSTest. Odkazujte samostatně na kompatibilní verzi Microsoft.NET.Test.Sdk, protože se řídí řadou verzí VSTest.

U projektu cíleného na Windows, který se obnovuje nebo sestavuje v Linuxu nebo macOS, nastavte EnableWindowsTargeting na true.

Volba základní třídy

Odvoďte z jedné z těchto tříd:

  • ApplicationTest spustí aplikaci před každým testem a zastaví ji během odstraňování. Přepište CreateProcessStartInfo, aby bylo možné identifikovat spustitelný soubor.
  • WindowTest také čeká na okno a zveřejní ho prostřednictvím MainWindow.

Deklarujte STATestClass přímo u každé konkrétní testovací třídy, protože atributy test-třídy MSTest nejsou zděděny:

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

Pomocí MainWindow testovacích metod můžete dotazovat nebo vyvolat vzory Windows model UI Automation. Balíček používá rozhraní API UIA2 System.Windows.Automation . Další knihovnu, jako je FlaUI, můžete vrstvit nad vystavenou AutomationElement , když potřebujete bohatší interakci prvků.

Přizpůsobte spuštění a rozpoznávání okna

Tyto členy můžete přepsat, když se výchozí nastavení nevejde do vaší aplikace:

  • ApplicationShutdownTimeout určuje, jak dlouho základní třída čeká na řádné vypnutí a vynucené ukončení. Výchozí hodnota je pět sekund.
  • WindowDiscoveryTimeout určuje, jak dlouho WindowTest čeká na okno. Výchozí hodnota je 10 sekund.
  • FindWindow vybere okno pro aplikace, které používají proces spouštěče, zobrazí úvodní obrazovku nebo vytvoří více oken nejvyšší úrovně.
  • StopApplication vypne aplikaci, když vybrané okno patří do jiného procesu, než je proces, který CreateProcessStartInfo se spustil.

Základní třídy monitorují TestContext.CancellationToken při spouštění a detekci oken. WindowTest selže, když se aplikace ukončí před zobrazením okna nebo když zjišťování dosáhne časového limitu.

Vysvětlení chování životního cyklu

ApplicationTest spustí jeden aplikační proces pro každé vyvolání testu. WindowTest vyhledá okno poté, co se proces spustí. Po dokončení testu a jeho metod čištění nástroj MSTest odstraní základní třídu, požádá o řádné zavření hlavního okna a ukončí strom procesu, pokud aplikace neodejde v rámci nakonfigurovaného časového limitu.

Pro parametrizované testy a opakování obdrží každé vyvolání svůj vlastní životní cyklus aplikace.

Viz také