Lingua
Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il pacchetto di anteprima MSTest.Windows.UIAutomation integra la gestione del ciclo di vita di MSTest con l'API di Windows Automazione interfaccia utente predefinita. Usalo per avviare un'applicazione desktop non pacchettizzata a attendibilità totale, trovare una delle sue finestre come AutomationElement e arrestare l'applicazione dopo ogni test.
Il pacchetto supporta le applicazioni Win32, Windows Forms e macchine virtuali Windows in una sessione interattiva di Windows. Non fornisce l'attivazione MSIX, UWP o WinUI, l'automazione con privilegi elevati dei processi, un desktop headless, localizzatori, attese automatiche, screenshot o un modello a oggetti a più finestre.
Importante
Questa funzionalità richiede pacchetti di anteprima MSTest 4.5 e un framework di destinazione specifico di Windows.
Abilitare Windows Automazione interfaccia utente
Con MSTest.Sdk, impostare EnableWindowsUIAutomation su true:
<Project Sdk="MSTest.Sdk/4.5.0">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<EnableWindowsUIAutomation>true</EnableWindowsUIAutomation>
</PropertyGroup>
</Project>
MSTest.Sdk aggiunge il pacchetto corrispondente MSTest.Windows.UIAutomation . Senza MSTest.Sdk, fare riferimento a MSTest.Windows.UIAutomation, MSTest.TestFramework e MSTest.TestAdapter nelle versioni MSTest corrispondenti. Indicare separatamente una versione compatibile Microsoft.NET.Test.Sdk, perché segue la linea di versione di VSTest.
Per un progetto destinato a Windows che viene ripristinato o compilato in Linux o macOS, impostare EnableWindowsTargeting su true.
Scegliere una classe base
Derivare da una di queste classi:
-
ApplicationTestavvia l'applicazione prima di ogni test e la arresta durante l'eliminazione. SostituireCreateProcessStartInfoper identificare l'eseguibile. -
WindowTestattende anche una finestra e la espone tramiteMainWindow.
Dichiarare STATestClass direttamente in ogni classe di test concreto perché gli attributi della classe di test MSTest non vengono ereditati:
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
Usare MainWindow nei metodi di test per eseguire query o richiamare modelli di Windows Automazione interfaccia utente. Il pacchetto usa l'API UIA2 System.Windows.Automation . Puoi aggiungere un'altra libreria, ad esempio FlaUI, sull'elemento esposto AutomationElement quando servono interazioni più avanzate con gli elementi.
Personalizzare l'avvio e il rilevamento delle finestre
Eseguire l'override di questi membri quando le impostazioni predefinite non rientrano nell'applicazione:
-
ApplicationShutdownTimeoutdetermina per quanto tempo la classe base attende l'arresto graduale e la terminazione forzata. Il valore predefinito è cinque secondi. -
WindowDiscoveryTimeoutcontrolla il tempoWindowTestdi attesa di una finestra. Il valore predefinito è 10 secondi. -
FindWindowseleziona una finestra per le applicazioni che usano un processo di avvio, visualizza una schermata iniziale o crea più finestre di primo livello. -
StopApplicationarresta un'applicazione quando la finestra selezionata appartiene a un processo diverso dal processo avviatoCreateProcessStartInfo.
Le classi di base monitorano TestContext.CancellationToken durante l'avvio e l'individuazione della finestra.
WindowTest non riesce quando l'applicazione si chiude prima che venga visualizzata una finestra o quando il rilevamento raggiunge il timeout previsto.
Comprendere il comportamento del ciclo di vita
ApplicationTest avvia un processo di applicazione per ogni invocazione di test.
WindowTest individua la finestra dopo l'avvio del processo. Al termine del test e dei relativi metodi di pulizia, MSTest elimina la classe base, richiede una chiusura normale nella finestra principale e termina l'albero dei processi se l'applicazione non viene chiusa entro il timeout configurato.
Per i test parametrizzati e i nuovi tentativi, ogni chiamata dispone del proprio ciclo di vita dell'applicazione.