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.