Alternativas ao WinAppDriver para aplicativos sem árvore de acessibilidade

Procurando uma alternativa ao WinAppDriver?Veja como funciona a automação de testes desktop no Windows, e como testar pela visão, sem código, aplicativos sem árvore de acessibilidade.

11 min de leituraPela equipe do GUI Test Studio

Quando a ferramenta de teste não consegue ver o seu aplicativo

Você aponta o Inspect para o botão Salvar do seu aplicativo, e ele mostra um único painel vazio.O seu localizador não encontra nada, o teste do WinAppDriver falha, e começa a busca por uma alternativa ao WinAppDriver.

Este guia explica como funciona a automação de testes de desktop no Windows, quais aplicativos ela não consegue ver e como testar mesmo assim um aplicativo de desktop do Windows desse tipo: encontrando cada elemento pela visão, do jeito que uma pessoa faz.

Como funciona a automação de testes de desktop no Windows?

Definição

A automação de testes de desktop é um software que conduz um aplicativo pela interface, como um testador faria, e verifica o que ele mostra.

  • No Windows, quase toda ela passa pelo Microsoft UI Automation, o framework de acessibilidade que também alimenta os leitores de tela.

Cada aplicativo descreve a sua interface para o Windows como uma árvore.A janela contém painéis, e os painéis contêm botões, campos e listas, cada um com um nome, um tipo e um lugar na tela.O Microsoft Active Accessibility, ou MSAA, é a tecnologia mais antiga que faz o mesmo para programas mais antigos.

Controles padrão

Win32 · WinForms · WPF

WindowOrders
Pane
EditCustomerAutomationId: CustomerBox
ListOrder linesAutomationId: LinesList
ButtonSaveAutomationId: SaveButton

Controles desenhados sob medida

Pintados pelo próprio aplicativo

WindowOrders
Pane
Nada dentro: o botão Salvar é uma imagem, não um elemento
À esquerda, uma ferramenta encontra o botão Salvar pelo AutomationId.À direita, não há nada a encontrar.

Ler a árvore

O aplicativo descreve a sua janela

Encontrar por localizador

Um AutomationId, um nome, um XPath

Agir

Clicar, digitar, selecionar

Verificar

Ler de volta um valor da árvore

Uma ferramenta de teste lê essa árvore, encontra um elemento com um localizador, como o AutomationId, o nome ou um XPath pela árvore, e depois clica nele, digita nele ou lê o valor dele.

Isso funciona bem quando a árvore está completa.A Microsoft fornece a descrição de todos os controles padrão de Win32, Windows Forms (WinForms) e WPF, então eles aparecem na árvore sozinhos.Um controle personalizado é diferente: os desenvolvedores dele precisam escrever essa descrição e, sem ela, a documentação da Microsoft diz que o controle é em grande parte opaco para o UI Automation, que pouco consegue informar além da localização dele.

O WinAppDriver e as alternativas leem a mesma árvore

O WinAppDriver, o Windows Application Driver da Microsoft, trouxe uma automação no estilo do Selenium para aplicativos UWP, Windows Forms, WPF e Win32 clássicos.A última versão estável dele no GitHub, a 1.2.1, é de novembro de 2020, seguida de uma versão candidata 1.3 em julho de 2021.O driver Windows do Appium, construído sobre ele, agora está marcado como obsoleto, e a documentação dele indica o driver Appium WinCore como o substituto oficial.

WinAppDriver

Novembro de 2020

Versão 1.2.1, a última versão estável

Julho de 2021

Uma versão candidata 1.3

Hoje

O driver Windows do Appium construído sobre ele está obsoleto: o substituto é o driver Appium WinCore

As alternativas habituais seguem, cada uma, um caminho diferente até a mesma árvore:

Appium WinCore e NovaWindows são drivers do Appium que trabalham com os elementos do UI Automation, a partir de um teste escrito em qualquer linguagem que o Appium suporte.
FlaUI é uma biblioteca .NET de código aberto que encapsula as bibliotecas de UI Automation da Microsoft para testes escritos em C#.
pywinauto é uma biblioteca Python de código aberto com dois back-ends: a API Win32 e o UI Automation.
Coded UI, o framework de teste de interface do próprio Visual Studio, está obsoleto: o Visual Studio 2019 é a última versão que cria testes com ele.
TestComplete e Ranorex são ferramentas comerciais que identificam os controles pelas propriedades, e as duas oferecem automação baseada em imagem para os controles que não conseguem reconhecer.

Até a orientação mais recente da Microsoft para aplicativos WinUI 3, os comandos winapp ui para agentes de IA, lê a árvore de acessibilidade ao vivo e pede aos desenvolvedores que definam um AutomationId em cada controle interativo.

Para ver as ferramentas de teste web lado a lado, consulte o estudo comparativo.

Quais aplicativos do Windows não têm árvore de acessibilidade?

Aponte o Inspect para qualquer um destes, e muitas vezes você vai encontrar um único painel vazio onde esperava um formulário.Essa é a realidade diária dos testes de aplicativos legados, e também de muitos aplicativos modernos.

Tipo de aplicativoO que uma ferramenta baseada na árvore costuma encontrar
Controles desenhados sob medida: uma grade, uma faixa de opções, um medidor que o aplicativo pinta sozinhoUm único retângulo, a menos que os desenvolvedores tenham escrito a acessibilidade dele
Programas em Delphi (VCL) e Visual Basic 6Rótulos e botões desenhados sem janela própria, e grades que escondem as células atrás de nomes genéricos
Programas MFC com controles desenhados pelo proprietárioBotões e listas que o próprio programa pinta, muitas vezes sem nome nem texto
Aplicativos Java Swing e AWTNada útil até que o Java Access Bridge seja ativado, e ele vem desativado por padrão
Jogos, visualizadores 3D, canvas, gráficos e mapasUma janela que contém uma imagem
Sessões do Citrix, da Área de Trabalho Remota e do VMware HorizonUma janela de pixels no seu computador
Aplicativos dentro de uma máquina virtualA janela da máquina virtual, sem nada dentro
Aplicativos Electron construídos sem nomes acessíveisElementos sem nenhum nome pelo qual encontrá-los
Plataformas de negócios que desenham os formulários à mãoA própria janela do formulário, e nada dentro dela

Às vezes a árvore existe, mas você não pode mexer no aplicativo: um programa de outro fornecedor, um build bloqueado para uma auditoria, uma equipe que não pode adicionar AutomationIds para você.Qualquer ferramenta que precise de um build de teste, de um agente dentro do aplicativo ou de uma alteração no código dele fica, então, fora de alcance.

Como verificar o seu próprio aplicativo em dois minutos

  1. 1

    Abra uma ferramenta de inspeção

    Instale o Accessibility Insights for Windows, a ferramenta de inspeção da Microsoft, ou use o Inspect do SDK do Windows.

  2. 2

    Passe o mouse sobre os elementos de que os seus testes precisam

    Cada um deve aparecer com um nome, um tipo e um AutomationId.

  3. 3

    Interprete o que você vê

    Um único painel para a janela inteira, ou elementos sem nome, significa que uma ferramenta baseada na árvore não consegue encontrá-los de forma confiável.

Testes baseados em imagem: teste o que está na tela

Definição

Os testes baseados em imagem são uma automação de testes que encontra os elementos pela aparência deles na tela, não pelo que o aplicativo diz sobre eles.

  • É assim que a automação de testes de desktop funciona sem informações de acessibilidade.
  • Ela não precisa de nada do aplicativo: nenhuma árvore, nenhum localizador, nenhuma alteração no código.

Se você consegue ver um elemento, um teste consegue alcançá-lo.

Encontrar pela visão

Na tela real, em uma área de busca

Agir de verdade

Entrada real de mouse e teclado

Ler as palavras

O texto como a tela o mostra

Verificar o que é mostrado

Em relação ao que você espera

O SikuliX é o exemplo clássico de código aberto: você captura uma imagem de cada elemento e escreve cada etapa como uma linha de script.As ferramentas comerciais oferecem isso como alternativa de reserva.A documentação do TestComplete, por exemplo, diz que os testes baseados em imagem dele só podem ser gravados em aplicativos Android: em um aplicativo de desktop, você captura as imagens e adiciona os comandos de teste à mão.

Feito de forma ingênua, um teste pela visão tem pontos fracos conhecidos.Cada um tem uma resposta:

O ponto fracoO que o resolve
Uma janela que mudou de lugarUma busca que se amplia para a tela inteira quando o elemento não está onde estava
Cliques gravados em coordenadas fixasCada clique direcionado para onde o elemento está agora
Vários botões idênticosUma área de busca em volta de cada elemento, para que os parecidos se distingam pelo lugar onde estão
Um tom mais claro, uma borda mais suaveUma comparação que ignora o ruído de renderização e ainda reprova diante de uma diferença real que uma pessoa veria
Imagens capturadas à mãoUma gravação que recorta todas as imagens para você
Um tamanho ou uma escala de tela diferenteGravar no tamanho e na escala de tela em que os testes são executados

Uma alternativa ao WinAppDriver que dispensa a árvore

O GUI Test Studio é uma suíte de testes de GUI de ponta a ponta para Windows que testa qualquer aplicativo que você vê na tela, sem código.Ele não escolhe entre a árvore e a tela.

Um clique gravado

O aplicativo descreve o elemento?

SimO teste guarda a descrição e a imagem: a execução pergunta primeiro ao aplicativo.
Não, um único painel vazioSó a imagem encontra o elemento, pela visão.

De qualquer forma, a asserção compara o que encontrou com a imagem que você gravou.

Como o GUI Test Studio encontra os elementos explica como as duas formas trabalham juntas.Veja o que isso significa, etapa por etapa, para um aplicativo sem árvore.

  1. 1

    Grave o aplicativo

    No GUI Test Runner-Recorder, clique em Gravar e escolha Um aplicativo.Escolha o programa entre os aplicativos abertos, ou procure um que ainda não está em execução.Marque a caixa que o inicia com o teste e o fecha no fim, para que toda execução comece com o aplicativo limpo.Depois, use o aplicativo como sempre.

    A tela inteira é sempre gravada.A opção de aplicativo só decide de onde vêm as asserções automáticas.

    Escolher um aplicativo mantém a notificação de outro programa fora do seu teste, enquanto cada clique e cada tecla que você usa continuam sendo gravados.Veja Gravar um teste.

  2. 2

    Cada elemento é guardado de duas formas

    Cada clique recebe uma asserção visual logo antes: uma imagem do elemento, o alvo visual dele.Quando o aplicativo descreve esse elemento para o Windows, o teste guarda também essa descrição.Quando o aplicativo responde com um único painel vazio, não há nada que valha a pena guardar, e só a imagem encontra o elemento.

    Alguns programas desenham os formulários à mão e só descrevem a própria janela do formulário.O teste guarda essa janela, então um formulário que mudou de lugar é encontrado de novo onde está agora.

  3. 3

    Verificar o que é mostrado

    Uma asserção visual verifica se um elemento está na tela e com a aparência certa.Uma asserção textual pergunta ao aplicativo o que um elemento diz e lê as palavras na tela quando o aplicativo não consegue informar.Uma asserção textual dinâmica verifica pelo formato um valor que muda a cada execução, como uma data ou um número de pedido.

    Cada comparação ignora as pequenas diferenças de renderização que toda tela tem e ainda detecta as regressões reais que uma pessoa chamaria de mudança: uma cor errada, um ícone que sumiu, uma palavra que mudou.Veja Asserções visuais.

  4. 4

    Execute-o, onde quer que a janela abra

    O teste reproduz os seus cliques e teclas como entrada real de mouse e teclado, direcionados para onde cada elemento está agora.Quando uma asserção não encontra o elemento na área de busca depois de um segundo, ela também busca na tela inteira, então uma janela que mudou de lugar não reprova o teste.O Relatório de confiança diz então que o elemento foi encontrado fora da área de busca e oferece ampliá-la no GUI Test Studio.

    Em um computador com vários monitores, um teste usa uma tela ou todas, e se lembra de qual.

    Um exemplo de execução: o Relatório de confiança destaca o que mudou e diz isso em palavras simples.

Citrix, Área de Trabalho Remota e máquinas virtuais

Uma sessão do Citrix, da Área de Trabalho Remota (RDP) ou do VMware Horizon chega ao seu computador como uma única janela de pixels.Algumas ferramentas só conseguem alcançar os controles dela quando estão instaladas no próprio servidor remoto, como a SmartBear descreve para o TestComplete.O GUI Test Studio testa a sessão a partir do computador que a mostra, pela visão, como qualquer outra janela.

Escolha Um aplicativo e a janela da sessão ao gravar, ou Uma área da tela para um painel dela.Um aplicativo em uma máquina virtual funciona do mesmo jeito: dê à máquina virtual um tamanho de janela fixo, o mesmo em todos os computadores que executam os testes.Veja O que você pode testar.

ExemploUm aplicativo de pedidos pela Área de Trabalho Remota

Um programa de pedidos em Delphi roda em um servidor, e os seus testadores o acessam pela Área de Trabalho Remota.Você grava um pedido na janela da sessão.Cada clique recebe a sua asserção visual, e você adiciona uma asserção textual que aguarda “Pedido salvo”.

Na execução seguinte, a sessão abre mais à direita.Cada asserção encontra o elemento lá, e cada clique o acompanha.

Execute testes de desktop a cada build

O gtr-cli, o executor de linha de comando, executa um teste exatamente como o botão Executar teste.Ele acrescenta o que um pipeline precisa: um código de saída, um arquivo JUnit e todas as evidências de uma falha em uma única pasta.

Comando
gtr-cli run tests --countdown 0 --junit results\junit.xml --artifacts results\artifacts

Um teste de desktop é reproduzido em uma tela real, então o agente de build precisa de uma sessão de área de trabalho do Windows desbloqueada.Uma máquina virtual com tamanho de tela fixo funciona bem como agente de teste.O guia de CI/CD faz essa configuração etapa por etapa.

Perguntas

O que posso usar no lugar do WinAppDriver?

Para um aplicativo com uma árvore de acessibilidade completa, os drivers Appium WinCore e NovaWindows, o FlaUI e o pywinauto leem o UI Automation do Windows a partir de código.Para um aplicativo sem árvore, ou para testar sem código, use uma ferramenta que encontre os elementos pela visão, como o GUI Test Studio, que também pergunta primeiro à árvore quando ela existe.

O WinAppDriver ainda recebe manutenção?

A última versão estável dele no GitHub é a 1.2.1, de novembro de 2020, seguida de uma versão candidata 1.3 em julho de 2021.A documentação do projeto Appium diz que o servidor WinAppDriver não recebe manutenção da Microsoft há anos e indica o driver Appium WinCore como o substituto oficial do seu próprio driver Windows.

Como testar um aplicativo que não tem árvore de acessibilidade?

Teste-o pela visão: encontre cada elemento na tela real pela aparência, aja com entrada real de mouse e teclado, leia as palavras na tela e compare o que é mostrado com o que você espera.O GUI Test Studio monta tudo isso a partir de uma gravação, então não há imagem para capturar à mão nem script para escrever.

Posso automatizar testes de um aplicativo em uma sessão do Citrix ou da Área de Trabalho Remota?

Sim, a partir do computador que mostra a sessão.A sessão chega a esse computador como uma única janela de pixels, então o teste encontra os elementos dela pela visão, como em qualquer outra janela, sem nada instalado no servidor remoto.

Os testes baseados em imagem quebram quando a janela muda de lugar?

Não quando são bem feitos.O GUI Test Studio direciona cada clique para onde o elemento está agora, e uma asserção que não encontra o elemento na área de busca depois de um segundo também busca na tela inteira, então uma janela que mudou de lugar não reprova o teste.

O GUI Test Studio também funciona com aplicativos WPF e Windows Forms?

Sim.Quando um aplicativo descreve a sua interface para o Windows, como fazem os aplicativos WPF e Windows Forms, o GTS Engine + AI pergunta primeiro a ele e guarda essa descrição com cada asserção.A imagem também é guardada, então o teste ainda encontra o elemento se a resposta do aplicativo um dia deixar a desejar.

WinAppDriver, Windows, Visual Studio, Selenium, Appium, FlaUI, pywinauto, TestComplete, Ranorex, SikuliX, Delphi, Java, Citrix, VMware Horizon e Electron são marcas comerciais dos respectivos proprietários.

Pronto para gravar o seu primeiro teste?

Todos os recursos, por 15 dias.

Prefere ver no tipo de aplicativo que você testa?Agende uma chamada gratuita de 30 minutos com a nossa equipe.

Agendar uma demonstração