Idioma
Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O pacote de pré-visualização MSTest.Windows.UIAutomation integra a gestão do ciclo de vida do MSTest com a API incorporada de Automatização da Interface do Utilizador do Windows. Utilize-o para iniciar uma aplicação de ambiente de trabalho com confiança total não empacotada, localizar uma das suas janelas como AutomationElement e parar a aplicação após cada teste.
O pacote suporta aplicações Win32, Windows Forms e WPF numa sessão interativa do Windows. Não oferece ativação MSIX, UWP ou WinUI, automação de processos elevados, ambiente de trabalho sem interface, localizadores, esperas automáticas, capturas de ecrã ou um modelo de objetos com múltiplas janelas.
Importante
Esta funcionalidade requer pacotes de pré-visualização MSTest 4.5 e um framework de destino específico para o Windows.
Ativar a Automatização da IU do Windows
Com MSTest.Sdk, defina EnableWindowsUIAutomation como true:
<Project Sdk="MSTest.Sdk/4.5.0">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<EnableWindowsUIAutomation>true</EnableWindowsUIAutomation>
</PropertyGroup>
</Project>
O MSTest.sdk adiciona o pacote correspondente MSTest.Windows.UIAutomation . Sem MSTest.Sdk, consulte MSTest.Windows.UIAutomation, MSTest.TestFramework, e MSTest.TestAdapter nas versões correspondentes do MSTest. Faça referência, em separado, a uma versão compatível Microsoft.NET.Test.Sdk, porque esta segue a linha de versões do VSTest.
Para um projeto direcionado para Windows que restaure ou construa em Linux ou macOS, defina EnableWindowsTargeting para true.
Escolha uma classe base
Derive de uma destas classes:
-
ApplicationTestinicia a aplicação antes de cada teste e pára-a durante a eliminação. SubstituaCreateProcessStartInfopara identificar o executável. -
WindowTesttambém espera por uma janela e disponibiliza-a através deMainWindow.
Declare o STATestClass diretamente em cada classe de teste concreta porque os atributos de classe de teste do MSTest não são herdados:
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
Utilize MainWindow nos seus métodos de teste para consultar ou invocar padrões do Windows Automatização da Interface de Utilizador. O pacote utiliza a API UIA2 System.Windows.Automation . Podes sobrepor outra biblioteca, como o FlaUI, sobre a exposta AutomationElement quando precisares de interação mais rica com elementos.
Personalizar o arranque e a descoberta de janelas
Anule estes membros quando os valores predefinidos não se ajustarem à sua aplicação:
-
ApplicationShutdownTimeoutdetermina quanto tempo a classe base espera por um encerramento normal e um encerramento forçado. O padrão é cinco segundos. -
WindowDiscoveryTimeoutControla quanto tempoWindowTestespera por uma janela. O padrão é 10 segundos. -
FindWindowSeleciona uma janela para aplicações que utilizam um processo de lançamento, mostram um ecrã de arranque ou criam múltiplas janelas de nível superior. -
StopApplicationencerra uma aplicação quando a janela selecionada pertence a um processo diferente do processo queCreateProcessStartInfofoi lançado.
As classes base observam TestContext.CancellationToken durante o arranque e a descoberta de janelas.
WindowTest falha quando a aplicação é encerrada antes de surgir uma janela ou quando a deteção atinge o tempo limite.
Compreender o comportamento do ciclo de vida
ApplicationTest inicia um processo de candidatura para cada invocação de teste.
WindowTest deteta a janela depois de o processo ser iniciado. Após o teste e os seus métodos de limpeza terminarem, o MSTest elimina a classe base, solicita um encerramento gracioso através da janela principal e termina a árvore de processos se a aplicação não sair dentro do timeout configurado.
Para testes parametrizados e repetições, cada execução tem o seu próprio ciclo de vida da aplicação.