Språk
Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Förhandsversionspaketet MSTest.Windows.UIAutomation integrerar MSTest-livscykelhantering med det inbyggda Windows UI Automation-API:et. Använd den för att starta en opaketerad skrivbordsapp med fullständig behörighet, hitta något av dess fönster som ett AutomationElement och stoppa appen efter varje test.
Paketet stöder Win32-, Windows Forms- och WPF-program i en interaktiv Windows session. Den tillhandahåller inte MSIX-, UWP- eller WinUI-aktivering, förhöjd processautomatisering, ett huvudlöst skrivbord, positionerare, automatiska väntetider, skärmbilder eller en objektmodell med flera fönster.
Important
Den här funktionen kräver MSTest 4.5-förhandsversionspaket och ett Windows specifikt målramverk.
Aktivera Windows UI Automation
Med MSTest.Sdk anger du EnableWindowsUIAutomation till true:
<Project Sdk="MSTest.Sdk/4.5.0">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<EnableWindowsUIAutomation>true</EnableWindowsUIAutomation>
</PropertyGroup>
</Project>
MSTest.Sdk lägger till matchande MSTest.Windows.UIAutomation paket. Utan MSTest.Sdk refererar du till MSTest.Windows.UIAutomation, MSTest.TestFrameworkoch MSTest.TestAdapter vid matchande MSTest-versioner. Referera till en kompatibel Microsoft.NET.Test.Sdk version separat eftersom den följer vsTest-versionsraden.
För ett Windows målprojekt som återställer eller bygger på Linux eller macOS anger du EnableWindowsTargeting till true.
Välj en basklass
Härled från någon av dessa klasser:
-
ApplicationTeststartar programmet före varje test och stoppar det under bortskaffandet. ÅsidosättCreateProcessStartInfoför att identifiera den körbara filen. -
WindowTestväntar också på ett fönster och exponerar det viaMainWindow.
Deklarera STATestClass direkt i varje konkret testklass eftersom MSTest-testklassattribut inte ärvs:
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
Använd MainWindow i testmetoderna för att fråga efter eller anropa Windows UI Automation mönster. Paketet använder UIA2-API System.Windows.Automation :et. Du kan lägga ett annat bibliotek, till exempel FlaUI, över det exponerade AutomationElement när du behöver mer omfattande elementinteraktion.
Anpassa start och identifiering av fönster
Åsidosätt dessa medlemmar när standardinställningarna inte passar ditt program:
-
ApplicationShutdownTimeoutstyr hur länge basklassen väntar på mjuk avstängning och tvångsavslutning. Standardvärdet är fem sekunder. -
WindowDiscoveryTimeoutstyr hur längeWindowTestväntar på ett fönster. Standardvärdet är 10 sekunder. -
FindWindowväljer ett fönster för program som använder en startprocess, visar en välkomstskärm eller skapar flera fönster på den översta nivån. -
StopApplicationstänger av ett program när det valda fönstret tillhör en annan process än den process somCreateProcessStartInfostartades.
Basklasserna observerar TestContext.CancellationToken under start- och fönsteridentifiering.
WindowTest misslyckas när applikationen avslutas innan ett fönster visas eller när upptäckten når sin tidsgräns.
Förstå livscykelbeteende
ApplicationTest startar en programprocess för varje testanrop.
WindowTest identifierar fönstret när processen har startats. När testet och dess rensningsmetoder har slutförts tar MSTest bort basklassen, begär en graciös stängning genom huvudfönstret och avslutar processträdet om programmet inte avslutas inom den konfigurerade tidsgränsen.
För parametriserade tester och återförsök får varje anrop sin egen programlivscykel.