Nota trad .: traduzi este artigo para ajudar aqueles que estão dando os primeiros passos na automação de testes e desejam aprender mais sobre a ferramenta Appium. Ele descreve o princípio geral de operação dos drivers Appium, bem como seus tipos e finalidade. No início da jornada, muitos testadores carecem de informações ordenadas e esse material ajudará a determinar a escolha da ferramenta certa.
O Appium é uma ferramenta de plataforma cruzada que permite automatizar o teste de aplicativos móveis (iOS e Android) e de desktop ao mesmo tempo. A maneira de implementar esse modelo multiplataforma é usar vários drivers. Essencialmente, o Appium possui aproximadamente a mesma arquitetura do Selenium WebDriver, que também usa vários drivers independentes para oferecer suporte à automação de testes entre navegadores.
Existem drivers Appium separados para diferentes ferramentas de automação, o que geralmente significa usar um driver para cada plataforma (um para iOS, outro para Android etc.). No entanto, existem exceções. Eles estão relacionados ao fato de que, na automação de aplicativos de teste para algumas plataformas (por exemplo, para Android), várias ferramentas são usadas em conjunto com o Appium. De fato, existem três drivers para o Android: baseados no UiAutomator, UiAutomator 2 e Espresso.
O princípio de operação dos motoristas
Os drivers são talvez o componente mais importante de toda a ferramenta, porque sua tarefa é executar os comandos da Appium API (conhecida como Protocolo WebDriver) em uma plataforma específica. Em essência, os drivers são tradutores que transformam o código do cliente Appium em algo que executa comandos no iOS, Android etc.
Para simplificar a arquitetura, entre outros motivos, cada driver individual é um servidor independente compatível com WebDriver (embora não tenha todas as opções que o servidor Appium principal possui). Dentro do driver, os comandos recebidos são processados de maneira peculiar. Por exemplo, eles podem ser transferidos para um processo separado que executa o código Java em um dispositivo Android.
Os próprios drivers têm uma arquitetura interna bastante complexa, às vezes baseada em toda uma gama de tecnologias. Abaixo está um diagrama que mostra a pilha de tecnologias envolvidas no driver XCUITest (driver iOS atual):

Como você pode ver, o princípio do driver XCUITest não é tão simples. Está disponível como parte do Appium e é iniciado sempre que você inicia uma sessão do iOS. No interior, o driver usa outra ferramenta, conhecida como WebDriverAgent, responsável pela conversão dos comandos do protocolo WebDriver em chamadas da biblioteca XCUITest.
Muitos drivers têm uma arquitetura semelhante, embora cada um deles possa implementar seus próprios, porque, em última análise, o driver é publicado no npm como uma classe que herda a classe Appium BaseDriver. Isso permite que os drivers se conectem facilmente ao Appium.
Tipos de drivers
Então, quantos drivers existem? Honestamente, é muito difícil dizer com certeza, porque, além dos drivers oficiais da Appium, também existem drivers não oficiais. Mas se olharmos para o código fonte do Appium, veremos o seguinte:
const AUTOMATION_NAMES = { APPIUM: 'Appium', UIAUTOMATOR2: 'UiAutomator2', UIAUTOMATOR1: 'UiAutomator1', XCUITEST: 'XCUITest', YOUIENGINE: 'YouiEngine', ESPRESSO: 'Espresso', TIZEN: 'Tizen', FAKE: 'Fake', INSTRUMENTS: 'Instruments', WINDOWS: 'Windows', MAC: 'Mac', };
Os nomes de automação são chaves para vários drivers que o Appium usa. Esta seção do código determina quais linhas podem ser usadas como valores para o recurso automationName. Cada driver geralmente suporta apenas uma plataforma. Aqui está uma breve descrição de cada driver com base em sua automação
- Appium é apenas um ponteiro para o driver padrão da plataforma selecionada e não é um driver separado;
- UiAutomator2 ( repositório ) - o driver atual da plataforma Android, usado por padrão e com base na ferramenta Google UiAutomator;
- O UiAutomator1 ( repositório ) é um driver Android antigo, baseado em uma versão mais antiga do UiAutomator. Esse driver não será suportado no futuro; portanto, é melhor abandoná-lo em favor do UiAutomator2;
- XCUITest ( repositório ) - o driver padrão para iOS, com base na ferramenta Apple XCUITest;
- YouiEngine ( repositório ) - um driver de desenvolvedores do You.i Labs, usado para automatizar o teste de aplicativos para várias plataformas criadas com base em seu SDK;
- Espresso ( repositório ) - o driver mais recente para Android, baseado na ferramenta Google Espresso;
- Tizen ( repositório ) - um driver dos desenvolvedores da Samsung para automatizar o teste de aplicativos baseados em Xamarin usados no Tizen OS;
- Falso (o nome fala por si) é usado como uma ferramenta de teste interna para o Appium. Você nunca precisará usá-lo;
- Instrumentos ( repositório ) - um driver desatualizado usado para aplicativos com iOS 9.3 e inferior;
- Windows ( repositório ) - A Microsoft montou um servidor compatível com Appium, chamado WinAppDriver, e esse driver o conecta ao servidor Appium principal. Projetado diretamente para automatizar aplicativos de desktop para Windows;
- Mac ( repositório ) - um driver que permite automatizar o teste de aplicativos de desktop para Mac.
Como já mencionado, cada um desses drivers possui sua própria arquitetura, que pode ser vista ao observar este diagrama:

Perguntas frequentes para drivers
Então, como você sabe qual driver usar?
Bem, se você precisar escrever
autotestes para aplicativos para iOS, Windows, Mac ou Tizen , a escolha é óbvia - use o driver padrão para cada uma dessas plataformas. Quanto ao Android, aqui você deve escolher entre UiAutomator2 e Espresso. É melhor saber mais sobre cada uma dessas ferramentas e entender qual é a melhor para o seu caso. Os recursos dos drivers UiAutomator2 e Espresso são semelhantes, mas não completamente idênticos.
Todos os drivers suportam os mesmos comandos igualmente?Sim e não Em um nível fundamental, estamos limitados pelos recursos de automação fornecidos pelos provedores de plataforma. O toque em um dispositivo Android funciona da mesma forma que em um dispositivo iOS. Mas o processo de execução de outros comandos pode variar. Os desenvolvedores do Appium, na medida do possível, tentam garantir o mesmo comportamento do driver em plataformas diferentes.
Posso mudar de um driver para outro e esperar que meus testes falhem?Sim e não Tudo depende de quais drivers estamos falando. Uma das vantagens do uso do Appium é que você pode alternar de uma ferramenta de automação para outra (por exemplo, do UiAutomator2 para o Espresso) sem sacrificar um conjunto de testes pronto. No entanto, você deve migrar lenta e metodicamente, certificando-se de que tudo ocorra conforme o esperado. Às vezes, a equipe do Appium publica diretrizes de migração para mudar de um driver para outro - você deve prestar atenção a eles antes de migrar.
Posso criar meu próprio driver?Sim Muitos já fizeram isso, em particular
Jason Huggins e
eu (no AppiumConf 2019). Mas existem outros drivers proprietários, como
o driver hbbtv de Christian Broman .
Os drivers mudarão no Appium 2.0?Esta é uma pergunta muito boa! Um dos aspectos negativos do sistema de driver Appium é que todos estão incluídos na dependência do servidor Appium. Mas estamos nos movendo para garantir que os drivers existam em um sistema menos coeso, onde você pode escolher quais drivers específicos usar com o Appium. Se você resolver esse problema, não precisará instalar o driver UiAutomator2 antigo e conectar suas dependências quando usar o Appium apenas para executar testes do iOS. (Você sabe que existe uma
proposta para o desenvolvimento do Appium 2.0 ?)
Espero que este artigo tenha sido útil para você. Ficarei feliz em ler os comentários sobre sua experiência com os drivers do Appium.