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
Controles desenhados sob medida
Pintados pelo próprio aplicativo
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:
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 aplicativo | O 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 sozinho | Um único retângulo, a menos que os desenvolvedores tenham escrito a acessibilidade dele |
| Programas em Delphi (VCL) e Visual Basic 6 | Ró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ário | Botões e listas que o próprio programa pinta, muitas vezes sem nome nem texto |
| Aplicativos Java Swing e AWT | Nada útil até que o Java Access Bridge seja ativado, e ele vem desativado por padrão |
| Jogos, visualizadores 3D, canvas, gráficos e mapas | Uma janela que contém uma imagem |
| Sessões do Citrix, da Área de Trabalho Remota e do VMware Horizon | Uma janela de pixels no seu computador |
| Aplicativos dentro de uma máquina virtual | A janela da máquina virtual, sem nada dentro |
| Aplicativos Electron construídos sem nomes acessíveis | Elementos sem nenhum nome pelo qual encontrá-los |
| Plataformas de negócios que desenham os formulários à mão | A 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
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
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
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 fraco | O que o resolve |
|---|---|
| Uma janela que mudou de lugar | Uma busca que se amplia para a tela inteira quando o elemento não está onde estava |
| Cliques gravados em coordenadas fixas | Cada clique direcionado para onde o elemento está agora |
| Vários botões idênticos | Uma á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 suave | Uma 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ão | Uma gravação que recorta todas as imagens para você |
| Um tamanho ou uma escala de tela diferente | Gravar 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?
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
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
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
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
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.
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.
gtr-cli run tests --countdown 0 --junit results\junit.xml --artifacts results\artifactsUm 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.