Taal
Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het preview-pakket MSTest.Windows.UIAutomation integreert het levenscyclusbeheer van MSTest met de ingebouwde Windows UI Automation-API. Gebruik dit om een niet-verpakte desktoptoepassing met volledig vertrouwen te starten, een van de vensters te vinden als een AutomationElement, en de toepassing na elke test te stoppen.
Het pakket ondersteunt Win32-, Windows Forms- en WPF-toepassingen in een interactieve Windows sessie. Het biedt geen MSIX-, UWP- of WinUI-activering, automatisering met verhoogde processen, een headless desktop, locators, automatische wachttijden, schermopnamen of een objectmodel met meerdere vensters.
Important
Voor deze functie zijn MSTest 4.5 preview-pakketten en een Windows-specifiek doelframework vereist.
Windows UI Automation inschakelen
Met MSTest.Sdk, stel EnableWindowsUIAutomation in op true:
<Project Sdk="MSTest.Sdk/4.5.0">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<EnableWindowsUIAutomation>true</EnableWindowsUIAutomation>
</PropertyGroup>
</Project>
MSTest.Sdk voegt het overeenkomende MSTest.Windows.UIAutomation pakket toe. Zonder MSTest.Sdk, verwijs naar MSTest.Windows.UIAutomation, MSTest.TestFramework en MSTest.TestAdapter met overeenkomende MSTest-versies. Verwijs afzonderlijk naar een compatibele Microsoft.NET.Test.Sdk versie omdat deze de VSTest-versieregel volgt.
Voor een op Windows gericht project dat op Linux of macOS wordt hersteld of gebouwd, stelt u EnableWindowsTargeting in op true.
Een basisklasse kiezen
Afgeleid van een van deze klassen:
-
ApplicationTeststart de toepassing vóór elke test en stopt deze tijdens verwijdering. OverschrijfCreateProcessStartInfoom het uitvoerbare bestand te identificeren. -
WindowTestwacht ook op een venster en maakt het zichtbaar viaMainWindow.
Definieer STATestClass direct op elke concrete testklasse, omdat MSTest-testklasse-attributen niet worden overgenomen:
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
Gebruik MainWindow in uw testmethoden om Windows UI Automation patronen op te vragen of aan te roepen. Het pakket maakt gebruik van de UIA2-API System.Windows.Automation . U kunt een andere bibliotheek, zoals FlaUI, boven op de beschikbaar gestelde AutomationElement gebruiken wanneer u uitgebreidere interactie met elementen nodig hebt.
Opstart- en vensterdetectie aanpassen
Overschrijf deze leden wanneer de standaardinstellingen niet passen bij uw toepassing:
-
ApplicationShutdownTimeoutbepaalt hoe lang de basisklasse wacht op een ordelijke afsluiting voordat geforceerde beëindiging plaatsvindt. De standaardwaarde is vijf seconden. -
WindowDiscoveryTimeoutbepaalt hoe lang moet worden gewachtWindowTestop een venster. De standaardwaarde is 10 seconden. -
FindWindowselecteert een venster voor toepassingen die gebruikmaken van een startprogramma, een welkomstscherm weergeven of meerdere vensters op het hoogste niveau maken. -
StopApplicationsluit een toepassing af wanneer het geselecteerde venster deel uitmaakt van een ander proces dan het proces datCreateProcessStartInfois gestart.
De basisklassen monitoren TestContext.CancellationToken tijdens het opstarten en de vensterdetectie.
WindowTest mislukt wanneer de toepassing wordt afgesloten voordat een venster wordt weergegeven of wanneer de detectie de time-out bereikt.
Het gedrag van de levenscyclus begrijpen
ApplicationTest start één toepassingsproces voor elke test aanroep.
WindowTest detecteert het venster nadat het proces is gestart. Nadat de test en de opschoningsmethoden zijn voltooid, ruimt MSTest de basisklasse op, verzoekt het via het hoofdvenster om de toepassing netjes af te sluiten en beëindigt het de procesboom als de toepassing niet binnen de geconfigureerde time-out wordt afgesloten.
Voor geparameteriseerde tests en nieuwe pogingen ontvangt elke aanroep een eigen toepassingslevenscyclus.