Langue
Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le package en préversion MSTest.Windows.UIAutomation intègre la gestion du cycle de vie MSTest avec l’API intégrée Windows UI Automation. Utilisez-la pour lancer une application de bureau de confiance totale non empaquetée, recherchez l’une de ses fenêtres en tant que AutomationElement, puis arrêtez l’application après chaque test.
Le package prend en charge les applications Win32, Windows Forms et WPF dans une session de Windows interactive. Il ne fournit pas d’activation MSIX, UWP ou WinUI, d’automatisation avec élévation de processus, d’un bureau sans tête, de localisateurs, d’attentes automatiques, de captures d’écran ou d’un modèle objet multi-fenêtre.
Important
Cette fonctionnalité nécessite des packages d’évaluation MSTest 4.5 et une infrastructure cible spécifique à Windows.
Activer Windows UI Automation
Avec MSTest.Sdk, définissez EnableWindowsUIAutomation sur true:
<Project Sdk="MSTest.Sdk/4.5.0">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<EnableWindowsUIAutomation>true</EnableWindowsUIAutomation>
</PropertyGroup>
</Project>
MSTest.Sdk ajoute le package correspondant MSTest.Windows.UIAutomation . En l’absence de MSTest.Sdk, référencez MSTest.Windows.UIAutomation, MSTest.TestAdapter et MSTest.TestFramework dans des versions MSTest correspondantes. Référencez une version compatible Microsoft.NET.Test.Sdk séparément, car elle suit la ligne de version VSTest.
Pour un projet ciblant Windows dont la restauration ou la génération est effectuée sur Linux ou macOS, définissez EnableWindowsTargeting sur true.
Choisir une classe de base
Dérivez de l’une de ces classes :
-
ApplicationTestdémarre l’application avant chaque test et l’arrête pendant l’élimination. RemplacezCreateProcessStartInfopour identifier l’exécutable. -
WindowTestattend aussi une fenêtre et l’expose viaMainWindow.
Déclarez STATestClass directement sur chaque classe de test concrète, car les attributs de classe de test MSTest ne sont pas hérités :
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
Utilisez MainWindow dans vos méthodes de test pour interroger ou invoquer les modèles de contrôle de Windows UI Automation. Le package utilise l’API UIA2 System.Windows.Automation . Vous pouvez ajouter une autre bibliothèque, comme FlaUI, par-dessus ce qui est exposé via AutomationElement lorsque vous avez besoin d’interactions plus riches avec les éléments.
Personnaliser la détection du démarrage et des fenêtres
Remplacez ces membres lorsque les valeurs par défaut ne correspondent pas à votre application :
-
ApplicationShutdownTimeoutcontrôle la durée pendant laquelle la classe de base attend l’arrêt approprié et l’arrêt forcé. La valeur par défaut est de cinq secondes. -
WindowDiscoveryTimeoutcontrôle la duréeWindowTestd’attente d’une fenêtre. La valeur par défaut est de 10 secondes. -
FindWindowsélectionne une fenêtre pour les applications qui utilisent un processus de lanceur, affichent un écran de démarrage ou créent plusieurs fenêtres de niveau supérieur. -
StopApplicationarrête une application lorsque la fenêtre sélectionnée appartient à un processus autre que le processus lancéCreateProcessStartInfo.
Les classes de base observent TestContext.CancellationToken pendant le démarrage et la découverte de fenêtres.
WindowTest échoue lorsque l’application se ferme avant qu’une fenêtre s’affiche ou lorsque la découverte atteint son délai d’expiration.
Comprendre le comportement du cycle de vie
ApplicationTest démarre un processus d’application pour chaque appel de test.
WindowTest découvre la fenêtre après le démarrage du processus. Une fois le test et ses méthodes de nettoyage terminés, MSTest supprime la classe de base, demande une fermeture normale dans la fenêtre principale et met fin à l’arborescence de processus si l’application ne quitte pas dans le délai d’expiration configuré.
Pour les tests paramétrables et les nouvelles tentatives, chaque appel reçoit son propre cycle de vie d’application.