Transportador - Depuración

Ahora que hemos visto todos los conceptos de Transportador en los capítulos anteriores, comprendamos los conceptos de depuración en detalle en este capítulo.

Introducción

Las pruebas de extremo a extremo (e2e) son muy difíciles de depurar porque dependen de todo el ecosistema de esa aplicación. Hemos visto que dependen de varias acciones o en particular podemos decir que de acciones previas como iniciar sesión y en ocasiones dependen del permiso. Otra dificultad para depurar las pruebas de e2e es su dependencia de WebDriver porque actúa de manera diferente con diferentes sistemas operativos y navegadores. Por último, la depuración de las pruebas de e2e también genera largos mensajes de error y dificulta la separación de los problemas relacionados con el navegador y los errores del proceso de prueba.

Tipos de fallas

Puede haber varias razones para el fracaso de los conjuntos de pruebas y los siguientes son algunos tipos de fallas bien conocidos:

Fallo de WebDriver

Cuando no se puede completar un comando, WebDriver emite un error. Por ejemplo, un navegador no puede obtener la dirección definida o un elemento no se encuentra como se esperaba.

Error inesperado de WebDriver

Se produce una falla inesperada del navegador y del sistema operativo cuando no se actualiza el administrador de controladores web.

Fallo del transportador para Angular

La falla de Transportador para Angular ocurre cuando Transportador no encontró Angular en la biblioteca como se esperaba.

Transportador Angular2 falla

En este tipo de falla, Protractor fallará cuando el parámetro useAllAngular2AppRoots no se encuentre en la configuración. Sucede porque, sin esto, el proceso de prueba observará un solo elemento raíz mientras espera más de un elemento en el proceso.

Fallo del transportador por tiempo de espera

Este tipo de falla ocurre cuando la especificación de prueba golpea un bucle o un grupo largo y no devuelve los datos a tiempo.

Expectativa fracaso

Una de las fallas de prueba más comunes que muestra cómo se ve una falla de expectativa normal.

¿Por qué la depuración es importante en Transportador?

Supongamos que, si ha escrito casos de prueba y fallaron, es muy importante saber cómo depurar esos casos de prueba porque sería muy difícil encontrar el lugar exacto donde ocurrió el error. Mientras trabaja con Transportador, obtendrá algunos errores largos en la fuente de color rojo en la línea de comando.

Pausar y depurar la prueba

Las formas de depurar en Transportador se explican aquí & miuns;

Método de pausa

Usar el método de pausa para depurar los casos de prueba en Transportador es una de las formas más fáciles. Podemos escribir el siguiente comando en el lugar donde queremos pausar nuestro código de prueba & miuns;

browser.pause();

Cuando los códigos en ejecución golpean el comando anterior, pausará el programa en ejecución en ese punto. Después de eso, podemos dar los siguientes comandos según nuestras preferencias:

Tipo C para avanzar

Siempre que un comando se haya agotado, debemos teclear C para avanzar. Si no escribe C, la prueba no ejecutará el código completo y fallará debido al error de tiempo de espera de Jasmine.

Escriba repl para ingresar al modo interactivo

El beneficio del modo interactivo es que podemos enviar los comandos de WebDriver a nuestro navegador. Si queremos entrar al modo interactivo, entonces tecleamosrepl.

Escriba Ctrl-C para salir y continuar las pruebas

Para salir de la prueba del estado de pausa y continuar la prueba desde donde se detuvo, debemos escribir Ctrl-C.

Ejemplo

En este ejemplo, tenemos el archivo de especificación siguiente llamado example_debug.js, el transportador intenta identificar un elemento con el localizador by.binding('mmmm') pero la URL (https://angularjs.org/ la página no tiene ningún elemento con el 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!')
   });
});

Ahora, para ejecutar la prueba anterior, debemos agregar el código browser.pause (), donde desea pausar la prueba, en el archivo de especificación anterior. Se verá de la siguiente manera:

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!')
   });
});

Pero antes de ejecutar, también necesitamos hacer algunos cambios en el archivo de configuración. Estamos haciendo los siguientes cambios en el archivo de configuración usado anteriormente, llamadoexample_configuration.js en el 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);
   }
};

Ahora, ejecute el siguiente comando:

protractor example_configuration.js

El depurador se iniciará después del comando anterior.

Método de depuración

Usar el método de pausa para depurar los casos de prueba en Transportador es una forma un poco avanzada. Podemos escribir el siguiente comando en el lugar donde queremos romper nuestro código de prueba:

browser.debugger();

Utiliza el depurador de nodos para depurar el código de prueba. Para ejecutar el comando anterior, debemos escribir el siguiente comando en un símbolo del sistema separado que se ha abierto desde la ubicación del proyecto de prueba:

protractor debug protractor.conf.js

En este método, también necesitamos escribir C en la terminal para continuar con el código de prueba. Pero al contrario del método de pausa, en este método se debe escribir solo una vez.

Ejemplo

En este ejemplo, estamos usando el mismo archivo de especificación llamado bexample_debug.js, usado arriba. La única diferencia es que en lugar debrowser.pause(), necesitamos usar browser.debugger()donde queremos romper el código de prueba. Se verá de la siguiente manera:

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 el mismo archivo de configuración, example_configuration.js, utilizado en el ejemplo anterior.

Ahora, ejecute la prueba del transportador con la siguiente opción de línea de comando de depuración

protractor debug example_configuration.js

El depurador se iniciará después del comando anterior.