Idioma

Teste aplicações de ambiente de trabalho Windows com o MSTest Automatização da Interface de Utilizador

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:

  • ApplicationTest inicia a aplicação antes de cada teste e pára-a durante a eliminação. Substitua CreateProcessStartInfo para identificar o executável.
  • WindowTest também espera por uma janela e disponibiliza-a através de MainWindow.

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:

  • ApplicationShutdownTimeout determina quanto tempo a classe base espera por um encerramento normal e um encerramento forçado. O padrão é cinco segundos.
  • WindowDiscoveryTimeout Controla quanto tempo WindowTest espera por uma janela. O padrão é 10 segundos.
  • FindWindow Seleciona 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.
  • StopApplication encerra uma aplicação quando a janela selecionada pertence a um processo diferente do processo que CreateProcessStartInfo foi 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.

Ver também