Comandos de Protocolo
WebdriverIO é um framework de automação que depende de vários protocolos de automação para controlar um agente remoto, por exemplo, para um navegador, dispositivo móvel ou televisão. Com base no dispositivo remoto, diferentes protocolos entram em jogo. Esses comandos são atribuídos ao objeto Browser ou Element dependendo das informações da sessão fornecidas pelo servidor remoto (por exemplo, driver do navegador).
Internamente, o WebdriverIO usa comandos de protocolo para quase todas as interações com o agente remoto. No entanto, comandos adicionais atribuídos ao objeto Browser ou Element simplificam o uso do WebdriverIO, por exemplo, obter o texto de um elemento usando comandos de protocolo seria assim:
const searchInput = await browser.findElement('css selector', '#lst-ib')
await client.getElementText(searchInput['element-6066-11e4-a52e-4f735466cecf'])
Usando os comandos convenientes do objeto Browser ou Element, isso pode ser reduzido para:
$('#lst-ib').getText()
A seção a seguir explica cada protocolo individual.
Protocolo WebDriver
O protocolo WebDriver é um padrão web para automação de navegadores. Ao contrário de outras ferramentas E2E, ele garante que a automação possa ser feita em navegadores reais que são usados pelos seus usuários, por exemplo, Firefox, Safari e Chrome e navegadores baseados em Chromium como Edge, e não apenas em mecanismos de navegador, como WebKit, que são muito diferentes.
A vantagem de usar o protocolo WebDriver em oposição a protocolos de depuração como Chrome DevTools é que você tem um conjunto específico de comandos que permitem interagir com o navegador da mesma maneira em todos os navegadores, o que reduz a probabilidade de instabilidade. Além disso, este protocolo oferece capacidades para escalabilidade massiva usando fornecedores de nuvem como Sauce Labs, BrowserStack e outros.
Protocolo WebDriver Bidi
O protocolo WebDriver Bidi é a segunda geração do protocolo e atualmente está sendo desenvolvido pela maioria dos fornecedores de navegadores. Em comparação com seu predecessor, o protocolo suporta uma comunicação bidirecional (daí "Bidi") entre o framework e o dispositivo remoto. Além disso, introduz primitivas adicionais para melhor introspecção do navegador para automatizar melhor aplicações web modernas em navegadores.
Dado que este protocolo está atualmente em desenvolvimento, mais recursos serão adicionados ao longo do tempo e suportados pelos navegadores. Se você usar os comandos convenientes do WebdriverIO, nada mudará para você. O WebdriverIO fará uso dessas novas capacidades de protocolo assim que estiverem disponíveis e suportadas no navegador.
Appium
O projeto Appium fornece capacidades para automatizar dispositivos móveis, desktop e todos os outros tipos de dispositivos IoT. Enquanto o WebDriver se concentra em navegadores e na web, a visão do Appium é usar a mesma abordagem, mas para qualquer dispositivo arbitrário. Além dos comandos que o WebDriver define, ele possui comandos especiais que frequentemente são específicos do dispositivo remoto que está sendo automatizado. Para cenários de teste móvel, isso é ideal quando você deseja escrever e executar os mesmos testes para aplicativos Android e iOS.
De acordo com a documentação do Appium, ele foi projetado para atender às necessidades de automação móvel de acordo com uma filosofia descrita pelos seguintes quatro princípios:
- Você não deve precisar recompilar seu aplicativo ou modificá-lo de qualquer forma para automatizá-lo.
- Você não deve estar preso a uma linguagem ou framework específico para escrever e executar seus testes.
- Um framework de automação móvel não deve reinventar a roda quando se trata de APIs de automação.
- Um framework de automação móvel deve ser de código aberto, em espírito e prática, bem como em nome!
Chromium
O protocolo Chromium oferece um super conjunto de comandos em cima do protocolo WebDriver que é suportado apenas ao executar sessões automatizadas através do Chromedriver ou Edgedriver.
Firefox
O protocolo Firefox oferece um super conjunto de comandos em cima do protocolo WebDriver que é suportado apenas ao executar sessões automatizadas através do Geckodriver.
Sauce Labs
O protocolo Sauce Labs oferece um super conjunto de comandos em cima do protocolo WebDriver que é suportado apenas ao executar sessões automatizadas usando a nuvem Sauce Labs.
Selenium Standalone
O protocolo Selenium Standalone oferece um super conjunto de comandos em cima do protocolo WebDriver que é suportado apenas ao executar sessões automatizadas usando o Selenium Grid.
Protocolo JSON Wire
O Protocolo JSON Wire é o antecessor do protocolo WebDriver e está obsoleto hoje. Embora alguns comandos ainda possam ser suportados em certos ambientes, não é recomendado usar nenhum de seus comandos.
Protocolo Mobile JSON Wire
O Protocolo Mobile JSON Wire é um super conjunto de comandos móveis em cima do Protocolo JSON Wire. Dado que este está obsoleto, o Protocolo Mobile JSON Wire também se tornou obsoleto. O Appium ainda pode suportar alguns de seus comandos, mas não é recomendável usá-los.