Aprenda como executar testes utilizando uma versão específica do Geckodriver 
Nos últimos dias me deparei com um problema ao tentar executar testes escritos com o framework Protractor no Firefox devido a uma incompatibilidade com a versão atual do geckodriver que o webdriver-manager atualiza por padrão (na data de publicação deste post v0.18.0). Vale resaltar que tais testes já funcionavam no Chrome.
Geckodriver é o webdriver que pilota do Firefox.
A primeira mudança que precisei realizar foi remover a configuração directConnect: true do arquivo de configurações do Protractor (protractor.conf.js). Na data deste post estou utilizando o Protractor versão 5.1.2 e nesta versão o Firefox não suporta tal configuração.
Sem a configuração directConnect e não havendo um seleniumAddress definido, por padrão o Protractor inicializa os testes utilizando o selenium standalone. Portanto, foi o que fiz, ou seja, removi o directConnect e não defini um seleniumAddress.
A próxima mudança foi definir a versão específica do geckodriver a ser utilizada, para isso bastou definir tal configuração com o caminho onde tal versão seria instalada, no meu caso em: “../../node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.17.0“. Ou seja, o testes não funcionavam na versão 0.18.0, mas funcionam na versão 0.17.0 do geckodriver.
O próximo passo foi criar um npm script para rodar os testes, porém previamente instalando a versão correta do geckodriver, a mesma definida na configuração anterior. Meu npm script ficou assim:
"test:e2e-firefox": "webdriver-manager update --versions.gecko=v0.17.0 && protractor tests/e2e/protractor.conf.js --browser firefox",
Este script foi definido no arquivo package.json.
Por fim, bastou instalar o geckodriver na versão compatível através do npm (gerenciador de pacotes Node.js). O comando para tal instalação foi:
npm install geckodriver@1.7.0 --save-dev
O @1.7.0 definie a versão específica a ser instalada e o – – save-dev define tal biblioteca como uma dependência de desenvolvimento.
Voilà! Bastou rodar o comando npm run test:e2e-firefox e este é um resumo do resultado dos testes executados no Firefox:
[00:19:56] I/update - geckodriver: unzipping geckodriver-v0.17.0.tar.gz [00:19:56] I/update - geckodriver: setting permissions to 0755 for /Users/foo/www/foobarbaz/node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.17.0 [00:19:56] I/launcher - Running 1 instances of WebDriver [00:19:56] I/local - Starting selenium standalone server... [00:19:57] I/local - Selenium standalone server started at http://192.168.0.19:62604/wd/hub Started
Versão correta do geckodriver instalada. ^
36 specs, 0 failures Finished in 97.227 seconds Executed 36 of 36 specs SUCCESS in 1 min 37 secs. [00:21:37] I/local - Shutting down selenium standalone server. [00:21:37] I/launcher - 0 instance(s) of WebDriver still running [00:21:37] I/launcher - firefox #01 passed
O legal de usar o selenium standalone é a vantagem de ele desligar o servidor automaticamente ao final da execução dos testes, bastante útil em cenários onde se utiliza integração e entrega contínua, que é o meu caso. 😉
Espero que o post ajude caso alguém esteja enfrentando o mesmo problema.
Tem alguma sugestão, crítica ou elogio, deixa um comentário. =)
Até a próxima e bons testes!
Apenas como um update, na versão 0.19.0 do geckodriver o problema foi resolvido, portanto, basta atualizar esta versão no package.json, remover a configuração específica do geckodriver no arquivo de configurações do protractor (protractor.conf.js) e atualiznar o npm script que roda os testes do Firefox para simplesmente rodar o webdriver-manager update puro, sem solicitar uma versão específica do geckodriver.
=)