Tests para formularios HTML con Watir

25 de agosto, 2011 - por

Modelar nos ayuda a adelantar problemas futuros. Es igual que lo hagamos con plastilina, madera o tests.

Aunque nosotros no tenemos una orientación fuerte hacia los tests, en el sentido de considerarlos una parte esencial de cualquiera de nuestros proyectos, sí que los incorporamos cuando entendemos que nos vienen bien. Ésto ocurre sobre todo en proyectos de larga duración, con múltiples funcionalidades, y en constante crecimiento.

Cuando se dan esas ocasiones, utilizamos las siguientes herramientas:

  • el framework PHPUnit para código PHP
  • el framework unittest para código Python
  • el framework Watir para tests basados en el navegador

Hoy queremos hablar un poco del último, ofreciendo un ejemplo de cómo lo utilizamos.

Instalar Watir (Web Application Testing in Ruby)

Watir es una gema de Ruby, por lo que lo primero que tienes que tener funcionando en tu máquina es Ruby. Tienes toda la información necesaria en la página oficial de Ruby.

Con Ruby funcionando, en un entorno Linux como el nuestro, la instalación de Watir requiere primero tener instaladas las rubygems. A partir de ahí, instalamos Watir:


sudo gem install watir-webdriver

Para cualquier otro entorno, o ver más información sobre detalles de la instalación, consulta la documentación oficial de Watir (en inglés).

Test para un formulario HTML

Un caso habitual en los tests basados en el navegador son los formularios. Por ejemplo, piensa en el siguiente formulario, que es una captura de uno de nuestros proyectos.

Captura del formulario sobre el que se hace el test.

En este típico formulario hay 2 campos (‘Title’ ‘Comment’) y un botón de envío (‘send’). Con Watir podemos montar un test sencillo que compruebe, por ejemplo, que el proceso de añadir un comentario está funcionando correctamente.

Cuando escribes un test basado en el navegador, tus 2 recursos principales son la URL y el HTML. Con la primera obtienes la página que quieres testear, y con todo el documento HTML de esa página puedes empezar a establecer las evaluaciones que quieres probar. En nuestro ejemplo, la parte que nos interesa del HTML, es la que afecta al formulario que acabamos de mostrar. Así que una aproximación razonable sería rellenar ese formulario con datos de prueba y realizar el envío.

Creamos un fichero, lo nombramos como test_review_form.rb, y lo iniciamos con el siguiente código.


# Test for Biz Review
require 'rubygems'
require 'watir-webdriver'
b = Watir::Browser.new :firefox
b.goto 'http://mistones.dev/hdz-granite-dallas/review'
b.text_field(:name, 'title').set('Great stock and fast service')
b.text_field(:name, 'comment').set('
        Both my husband and I are pretty happy with the job the
        guys at HDZ Granite have done in our kitchen and our
        master bath. Fair price, helpful, informative and on time.
')
b.button(:value, 'send').click

Bastante claro, ¿no? Le decimos a Watir que abra una URL. Que dentro del documento HTML de esa URL rellene los campos, cuyos atributos name son ‘title’ y ‘comment’, con los datos que le pasamos. Y que a continuación pulse el botón cuyo atributo value es ‘send’.

Nos falta añadir la evaluación. En nuestro caso, vamos a evaluar si existe cierto contenido en el documento HTML, contenido que sabemos que sólo existe en la página posterior a un envío correcto.


if b.text.include? 'Your Review has been Published'
        puts 'Test passed. Test review successful.'
else
        puts 'Test failed. Test review was not successful.'
end

Con ésto ya tenemos un test completo. Podemos probarlo llamándolo:


ruby test_review_form.rb

A continuación, Watir abre el navegador instanciado en el test y ejecuta los pasos indicados. Cuando termina, devuelve los mensajes de ‘passed’ o ‘failed’.

Una vez que cuentas con este tipo de tests, dependiendo de tus gustos, filosofía, metodología, estilo, etc. puedes automatizarlos con herramientas de integración continua, o crearte tu propio proceso de comprobación, o sencillamente correrlos cada cierto tiempo para asegurarte de que las cosas siguen funcionando.

Tema: Desarrollo, QA

Etiquetas: , , , , .


Otras entradas que pueden interesarte

hay 2 comentarios para esta entrada

  1. Gonzalo dice:

    Hola quirero hacerte una pregunta por si la sabes:

    Como hago para seleccionar un pop-ups con la libreria “watir-webdriver”.
    La verdad no puedo hacer que mi script seleccione el pop-ups para poder utilizarlo
    y automatizarlo.
    Sabes algo de eso??

    Lo unico que encotre fue esto:
    browser.window(:title => “annoying popup”).use do
    browser.button(:id => “close”).click
    end

    Pero me tira este error:

    in `’: undefined method `use’ for [#]:Array (NoMethodError)

    No se si es algo que hago mal yo o no es la forma.

    Gracias!!!

  2. grosshat dice:

    Así de primeras, la forma que comentas es la habitual. Voy a hacer un test y te cuento. :)