Transferidor - Depuração
Agora que vimos todos os conceitos do Protractor nos capítulos anteriores, vamos entender os conceitos de depuração em detalhes neste capítulo.
Introdução
Testes ponta a ponta (e2e) são muito difíceis de depurar porque dependem de todo o ecossistema desse aplicativo. Vimos que dependem de várias ações ou, particularmente, podemos dizer que de ações anteriores como o login e às vezes dependem da permissão. Outra dificuldade na depuração de testes e2e é sua dependência do WebDriver porque ele age de maneira diferente com diferentes sistemas operacionais e navegadores. Por fim, a depuração de testes e2e também gera longas mensagens de erro e torna difícil separar os problemas relacionados ao navegador e os erros do processo de teste.
Tipos de falha
Pode haver vários motivos para a falha de suítes de teste e a seguir estão alguns tipos de falha bem conhecidos -
Falha do WebDriver
Quando um comando não pode ser concluído, um erro é lançado pelo WebDriver. Por exemplo, um navegador não pode obter o endereço definido ou um elemento não foi encontrado conforme o esperado.
Falha inesperada do WebDriver
Um navegador inesperado e uma falha relacionada ao sistema operacional acontecem quando ele falha ao atualizar o gerenciador de driver da web.
Falha do transferidor para Angular
A falha do Transferidor para Angular ocorre quando o Transferidor não encontrou o Angular na biblioteca como esperado.
Falha do transferidor Angular2
Nesse tipo de falha, o Protractor falhará quando o parâmetro useAllAngular2AppRoots não for encontrado na configuração. Isso acontece porque, sem isso, o processo de teste olhará para um único elemento raiz enquanto espera mais de um elemento no processo.
Falha do transferidor por tempo limite
Esse tipo de falha ocorre quando a especificação de teste atinge um loop ou um pool longo e falha em retornar os dados a tempo.
Falha de expectativa
Uma das falhas de teste mais comuns que mostra a aparência de uma falha de expectativa normal.
Por que a depuração é importante no Protractor?
Suponha que, se você escreveu casos de teste e eles falharam, é muito importante saber como depurar esses casos de teste, pois seria muito difícil encontrar o local exato onde o erro ocorreu. Ao trabalhar com o Protractor, você obterá alguns erros longos na fonte da cor vermelha na linha de comando.
Pausando e depurando o teste
As maneiras de depurar no Protractor são explicadas aqui & miuns;
Método de pausa
Usar o método pause para depurar os casos de teste no Protractor é uma das maneiras mais fáceis. Podemos digitar o seguinte comando no local onde queremos pausar o nosso código de teste & miuns;
browser.pause();
Quando os códigos em execução atingirem o comando acima, ele pausará o programa em execução nesse ponto. Depois disso, podemos dar os seguintes comandos de acordo com nossa preferência -
Digite C para seguir em frente
Sempre que um comando se esgota, devemos digitar C para seguir em frente. Se você não digitar C, o teste não executará o código completo e falhará devido ao erro de tempo limite do Jasmine.
Digite repl para entrar no modo interativo
A vantagem do modo interativo é que podemos enviar os comandos WebDriver para o nosso navegador. Se quisermos entrar no modo interativo, digiterepl.
Digite Ctrl-C para sair e continuar os testes
Para sair do teste do estado de pausa e continuar o teste de onde parou, precisamos digitar Ctrl-C.
Exemplo
Neste exemplo, temos o arquivo de especificação abaixo denominado example_debug.js, transferidor tenta identificar um elemento com localizador by.binding('mmmm') mas o URL (https://angularjs.org/ a página não tem nenhum elemento com o localizador especificado.
describe('Suite for protractor debugger',function(){
it('Failing spec',function(){
browser.get("http://angularjs.org");
element(by.model('yourName')).sendKeys('Vijay');
//Element doesn't exist
var welcomeText =
element(by.binding('mmmm')).getText();
expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
});
});
Agora, para executar o teste acima, precisamos adicionar o código browser.pause (), onde você deseja pausar o teste, no arquivo de especificação acima. Será o seguinte -
describe('Suite for protractor debugger',function(){
it('Failing spec',function(){
browser.get("http://angularjs.org");
browser.pause();
element(by.model('yourName')).sendKeys('Vijay');
//Element doesn't exist
var welcomeText =
element(by.binding('mmmm')).getText();
expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
});
});
Mas antes de executar, precisamos fazer algumas mudanças no arquivo de configuração também. Estamos fazendo as seguintes alterações no arquivo de configuração usado anteriormente, denominadoexample_configuration.js no capítulo anterior -
// An example configuration file.
exports.config = {
directConnect: true,
// Capabilities to be passed to the webdriver instance.
capabilities: {
'browserName': 'chrome'
},
// Framework to use. Jasmine is recommended.
framework: 'jasmine',
// Spec patterns are relative to the current working directory when
// protractor is called.
specs: ['example_debug.js'],
allScriptsTimeout: 999999,
jasmineNodeOpts: {
defaultTimeoutInterval: 999999
},
onPrepare: function () {
browser.manage().window().maximize();
browser.manage().timeouts().implicitlyWait(5000);
}
};
Agora, execute o seguinte comando -
protractor example_configuration.js
O depurador será iniciado após o comando acima.
Método Depurador
Usar o método pause para depurar os casos de teste no Protractor é uma maneira um pouco avançada. Podemos digitar o seguinte comando no local em que queremos quebrar nosso código de teste -
browser.debugger();
Ele usa o depurador de nó para depurar o código de teste. Para executar o comando acima, devemos digitar o seguinte comando em um prompt de comando separado que foi aberto a partir do local do projeto de teste -
protractor debug protractor.conf.js
Neste método, também precisamos digitar C no terminal para continuar o código de teste. Mas ao contrário do método de pausa, neste método deve ser digitado apenas uma vez.
Exemplo
Neste exemplo, estamos usando o mesmo arquivo de especificação chamado bexample_debug.js, usado acima. A única diferença é que em vez debrowser.pause(), precisamos usar browser.debugger()onde queremos quebrar o código de teste. Será o seguinte -
describe('Suite for protractor debugger',function(){
it('Failing spec',function(){
browser.get("http://angularjs.org");
browser.debugger();
element(by.model('yourName')).sendKeys('Vijay');
//Element doesn't exist
var welcomeText = element(by.binding('mmmm')).getText();
expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
});
});
Estamos usando o mesmo arquivo de configuração, example_configuration.js, usado no exemplo acima.
Agora, execute o teste do transferidor com a seguinte opção de linha de comando de depuração
protractor debug example_configuration.js
O depurador será iniciado após o comando acima.