Como configurar o Nightwatch em uma configuração multi-SO

Introdução

Este artigo é uma continuação de https://www.ux-republic.com/introduction-to-nightwatch-for-lightning-acceptance-tests/

Nightwatch em uma equipe com vários sistemas operacionais

No mundo real, você pode encontrar uma equipe executando vários sistemas operacionais: Windows, MacOS, Linux, etc. Quando você deseja executar um teste de aceitação, ele deve ser executado em cada sistema operacional.
O Nightwatch usa o Selenium como um executor de navegador subjacente, no entanto, o driver do navegador deve ser diferente em cada sistema operacional: você não deseja executar uma versão Windows do Chrome sempre que o Nightwatch for executado no MacOS e vice-versa.
Curiosidade: você NÃO precisa da seguinte configuração se estiver executando apenas testes de aceitação no Firefox (MacOS ou Windows). Apenas o Chrome requer a seguinte configuração.

A configuração

Primeiro, você precisa pegar um driver Selenium Chrome para Windows. O driver mais recente é disponíveis aqui. Coloque isso abaixo (your_preferred_nighwatch_path)/lib/chromedriver.exe : o outro chromedriver para MacOS/Linux já está disponível em nosso node_modules pasta.
Em segundo lugar, você precisa criar um nightwath.conf.js arquivo, é aqui que você dividirá os drivers:

module.exports = (function (settings) {
  //Setting chromedriver path at runtime to run on different architectures
  if (process.platform === "darwin") {
    settings.selenium.cli_args["webdriver.chrome.driver"] = "./node_modules/chromedriver/bin/chromedriver";
  }
  else if (process.platform === "win32" || process.platform === "win64") {
    settings.selenium.cli_args["webdriver.chrome.driver"] = "nw/lib/chromedriver.exe";
  }
  return settings;
})(require('./nightwatch.json'));

Terceiro, você precisa criar um nightwatch.js Arquivo. Este é um runner, e isso é obrigatório se você quiser executar testes no Windows, runner.js já está empacotado com Nightwatch:

require('./node_modules/nightwatch/bin/runner.js');
Resumindo

Agora que dividimos nossos drivers, você pode se livrar do webdriver.chrome.driver definição sob o seu nightwatch.json configuração do selenium, pois ela será concluída automaticamente:

"selenium" : {
			"start_process" : true,
			"server_path" : "nw/lib/selenium-server-standalone-2.53.0.jar",
			"log_path" : "nw/logs",
			"host" : "127.0.0.1",
			"port" : 4444,
			"cli_args" : {
				"webdriver.chrome.driver" : "", // empty !
				"webdriver.ie.driver" : ""
			}
		}

Por fim, volte para o seu package.json, atualize o scripts campo e diga ao Nightwatch para usar nosso mais novo divisor:

"scripts": {
    "test": "node nightwatch.js -c nightwatch.conf.js"
  },

Terminamos, basta executá-lo:

teste npm

No MacOS/Linux, ./node_modules/chromedriver/bin/chromedriver será executado, no Windows, nw/lib/chromedriver.exe será executado em seu lugar.

Feliz teste!

Laurent, desenvolvedor Javascript na UX-Republic