Introducción a Protractor

En este tutorial vamos a ver cómo realizar pruebas end2end en aplicaciones implementadas con AngularJS con la herramienta Protractor.

Índice de contenidos

1. Entorno

Este tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil Mac Book Pro 15″ (2,3 Ghz Intel Core i7, 16 GB DDR3)
  • Sistema Operativo: Mac OS X El Capitan
  • Atom 1.5.3
  • Protractor 3.1.1

2. Introducción

Protractor es la herramienta que la gente de Google nos ofrece para la implementación de pruebas E2E de aplicaciones AngularJS, y recalco lo de aplicaciones AngularJS porque solo funciona con este tipo de aplicaciones.

Ya sabemos de otros tutoriales que AngularJS nos permite crear tests de cada elemento de la aplicación como vimos en este tutorial de Miguel Arlandy.

En esta ocasión vamos a hablar de pruebas máquina a máquina o test de aceptación, que se caracterizan por ser tests que realizan las verificaciones una vez la aplicación esta desplegada, gracias a Selenium, del que también hemos hablado en varias ocasiones.

3. Vamos al lío

Lo primero que tenemos que hacer es instalar la herramienta, que se distribuye como paquete npm.

$> npm install -g protractor

Esto nos va a instalar de forma global las herramientas protractor y webdriver-manager. Esta última nos va a ayudar a levantar una instancia de Selenium Server para lo que tendremos que ejecutar.

$> webdriver-manager update

Y una vez se haya descargado todos los binarios necesarios arrancamos la instancia ejecutando:

$> webdriver-manager start

Por defecto, nos levantará el servidor de Selenium en la URL: http://localhost:4444/wd/hub

El siguiente paso es configurar Protractor para lo que creamos el fichero e2e.conf.js en la raíz del proyecto con el siguiente contenido:

exports.config = {
  seleniumAddress: 'http://127.0.0.1:4444/wd/hub',
  multiCapabilities: [{
    browserName: 'firefox'
  }, {
    browserName: 'chrome'
  }],
  specs: ['test/e2e/**/*.spec.js'],
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000
  }
}

En este fichero le estamos indicando cuál es la URL del servidor de Selenium que vamos a utilizar , en qué navegadores vamos a ejecutar, en este caso, Firefox y Chrome, dónde van a residir nuestros tests dentro de la estructura del proyecto y la configuración de Jasmine, para que muestre colores y establecer un timeout máximo de espera.

Ahora creamos nuestro primer tests, para lo cual necesitamos que la aplicación que vamos a probar este corriendo. En este enlace podéis descargar la aplicación de ejemplo con todo el contenido https://raguilera@bitbucket.org/raguilera/ng-protractor.git. Ahora ejecutáis dentro del directorio del proyecto:

$> bower install
$> live-server

Y ya tendréis la aplicación corriendo. En caso de error aseguraos que tenéis instalado bower y/o live-server, en caso contrario:

$> npm install -g bower
$> npm install -g live-server

La aplicación se levantará por defecto si no está ocupado en el puerto 8080 y simplemente consiste en un pequeño formulario que solo admite números y permite sumarlos, mostrando el resultado con un filtro que le añade tres asteriscos por delante y por detrás.

Ahora en vuestro proyecto creáis el fichero test/first.spec.js con el siguiente contenido:

describe('E2E: main page', function(){

  it('should exists calc div', function(){
    browser.get('http://127.0.0.1:8080/')
    var ele = by.id('calc')
    expect(browser.isElementPresent(ele)).toBe(true)
    element(by.model('calc.a')).sendKeys(2)
    element(by.model('calc.b')).sendKeys(4)
    element(by.id('suma')).click()
    expect(element(by.binding('calc.c')).getText()).toEqual('***6***')
  })

})

En este test primero conectamos con la URL donde está desplegada la aplicación y comprobamos que el div con id ‘calc’ existe. Acto seguido añadimos los valores deseados a los elementos del formulario por su propiedad ng-model y forzamos un click en el botón con identificador ‘suma’. Inmediatamente podemos evaluar el valor de la variable {{calc.c}} gracias a la función binding y con el matcher toEqual podemos ver que efectivamente es el resultado esperado.

Ahora ejecutamos en el terminal el comando protractor pasándole como argumento el fichero de configuración:

$> protractor e2e.conf.js

Esto hace que se ejecuten todos los tests que tengamos, lo que hará que se abran los navegadores especificados y que el resultado de los mismos nos lo muestre por pantalla.

4. Conclusiones

Como habéis podido ver resulta realmente sencillo hacer test end2end con protractor aunque recordad que en ningún caso deben sustituir a los test unitarios, ya que estos test son los más frágiles y requieren de mucho más mantenimiento.

Cualquier duda o sugerencia en la zona de comentarios.

Comentarios

Un comentario

  1. Hola, tengo que dar una expocicion acerca del protactor y queria saber si me podes ayudar , si conoces de algun sitio web para buscar mas informacion sobre protactor me serbiria bastante

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultor tecnológico de desarrollo de proyectos informáticos.
Ingeniero en Informática, especialidad en Ingeniería del Software.

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

Imagen con fondo abstracto azul y el texto “Adictos al Trabajo” centrado.

11/02/2026

Rubén Gavilán Fernández

El autoescalado de runners en GitLab CI permite adaptar dinámicamente la capacidad de ejecución de los pipelines a la carga real de trabajo. En este artículo analizamos la arquitectura del Docker Autoscaler executor y mostramos un ejemplo práctico de autoescalado sobre AWS, optimizando rendimiento, costes y operativa DevOps.

30/10/2025

Benjamín Suárez Menéndez

El Complex Problem Solving (CPS) es un proceso estructurado basado en herramientas, técnicas y actitudes que nos facilita la resolución de problemas complejos.

03/10/2025

Miguel García Rodríguez

Descubre cómo el diseño y la psicología del comportamiento utilizan sesgos cognitivos para influir en la toma de decisiones de los usuarios y potenciar la persuasión.