Automatización de Pruebas Web con Selenium RC y Ant

En este post vamos a ver cómo realizar pruebas sobre páginas web de una forma sencilla y rápida. En primer lugar vamos a explicar qué es Selenium:
Selenium es un framework de pruebas portable para aplicaciones web. Las pruebas pueden ser escritas directamente en tablas HTML o codificadas en un gran número de lenguajes de programación (PHP, Ruby, Java, JavaScript, etc.) y se ejecutan directamente sobre el navegador (soporta Firefox, IE, Opera, Safari y algunos más). Además podemos desplegar Selenium en distintos sistemas operativos.
Selenium está formado por varios proyectos:
  • Selenium Core: Es el sistema de pruebas original basado en JavaScript. Actualmente es usado por Selenium Remote Control aunque puede utilziarse como un sistema de pruebas JavaScript/HTML
  • Selenium IDE: Es un plugin de Firefox que facilita la tarea de grabar y ejecutar pruebas HTML. Podemos incluso exportar dichos test HTML a los distintos lenguajes de programación.
  • Selenium Remote Control: Es un sistema cliente/servidor que nor permite controlar los navegadores web localmente o sobre otros ordenadores usando un lenguaje de programación y el framework de pruebas.
  • Selenium Grid: Permite la ejecución de pruebas en varios servidores de una forma distribuida
  • Otros proyectos: Selenium on Rails, Selenium on Ruby y CubiText (Eclipse)

Como puede verse, disponemos de muchas herramientas para hacer pruebas dentro de Selenium. En el siguiente blog se muestra un tutorial sobre cómo hacer pruebas mediante Selenium IDE:

En este tema mostraré cómo crear un proyecto Ant que ejecute las pruebas de forma automática. Para ello ejecutaremos una prueba simple sobre la página DZone.

Componentes Redimensionables en Swing

Hace unos días descubrí un post en el que se explicaba cómo crear elementos redimensionables con Swing de una manera sencilla y rápida. La entrada está explicada bastante bien y puedes consultarla aquí. Las principales características de la solución aportada por Santhosh Kumar T son:
  • Se trabaja con una clase JResizer que contiene el elemento redimensionable
  • Podemos redimensionar cualquier componente
  • Los bordes y los puntos de agarre son totalmente configurables
En esta entrada veremos cómo aplicar esta solución y un aporte realizado por mí.

Tooltips en celdas de JTable

Hace poco, trabajando con el proyecto discography-generator me encontré el problema de hacer que las celdas de un javax.swing.JTable mostraran un tooltip o "mensaje emergente" cuando el ratón estuviera encima.

Lo único que estaba buscando era que se mostrara el contenido de la celda, algo muy simple a priori pero que, como ocurre casi siempre en Swing, acaba siendo algo rebuscado. La solución la encontré en la documentación oficial de SUN:
En este post veremos el código necesario para implementar este comportamiento.

Sistema de plantillas en menos de 50 líneas

En este post presentaré una solución cómoda y rápida (que no tiene porqué ser la mejor) para crear un sistema de plantillas basado en Java. En primer lugar voy a aclarar a qué quiero referirme cuando hablo de "sistema de plantillas". La idea es la siguiente, partiendo de un texto como el siguiente:
Hola ${usuario}, hoy es ${fecha}

Vamos a diseñar un sistema que reciba este texto (en forma de String o InputStream) y un mapa de propiedades, de forma que sustituya todo lo que encuentre del tipo ${clave} por el valor correspondiente en el mapa.

Estructura de directorios de Maven

En esta breve entrada se expondrá la estructura estándar de directorios de Maven. Se expondrán la estructura para cada tipo de proyecto.

Proyecto J2SE (JAR):

proyecto
|-src
|_|-main
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|_|-test
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|-target


Proyecto WAR:

proyecto
|-src
|_|-main
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|_|_|-webapp
|_|_|_|-<contenido-web>
|_|_|_|-WEB-INF
|_|_|_|-META-INF
|_|-test
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|-target

Cargar un fichero de propiedades en Java

En esta entrada voy a explicar cómo cargar un fichero de propiedades de Java. Esta operación aunque sencilla puede ayudarnos mucho en la separación de responsabilidades entre las distintas partes de nuestro sistema.

Por ejemplo, si tenemos que mostrar una serie de mensajes por pantalla. En lugar de embeber los mensajes dentro del código Java escribiremos dichos mensajes en un fichero .properties asociados cada uno a una clave. Si en un futuro queremos cambiar los mensajes, podemos simplemente cambiar el fichero de propiedades sin tener la necesidad de cambiar el código fuente y volver a compilar la clase donde estuvieran.

Proyectos en los que participo

El motivo de esta entrada es que conozcáis los proyectos en los que estoy involucrado y soy propietario.

En primer lugar el proyecto rolemaster. Este proyecto es un asistente para RMSS (Rolemaster Standard System). RMSS es un juego de rol ya descatalogado pero que seguimos practicando mis amigos y yo. Decidimos crear esta aplicación con el objetivo de facilitar la dirección del juego de forma que no se perdiera tanto tiempo consultando las reglas una y otra vez. Cabe mencionar que la principal característica de este juego con respecto a otros similares es que existe una tabla y una regla para todo, lo que provoca que muchas veces todo vaya muy lento. El proyecto está alojado en Google Code en la siguiente URL:
El proyecto está elaborado en JSF y JPA (se ha elegido Hibernate como implementación) y precisa de una Base de Datos MySQL. Las mejoras que se están barajando son:
  • Hacer que la BBDD sea una SQLite o alguna similar para que pueda estar empotrada en el proyecto.
  • Actualmente el asistente sólo controla la experienciaspor lo que se está pensando en ampliar el asistente al combate y otras situaciones.
El otro proyecto en el que estoy involucrado es discography-generator. Este proyecto consiste en generar una aplicación HTML a partir de carpetas con MP3 de forma que podamos navegar por las páginas web e ir escuchando las canciones. Está pensado para gestionar discografías de forma que tengas una aplicación web por cada discografía y puedas ir navegando este los distintos discos, escuchándo las canciones.

Nota: No incluye ni descaga MP3 alguno, debes tenerlos en el disco duro.

Este proyecto también está alojado en Google Code:
Está elaborado en Swing y precisa de Java 1.6. Actualmente genera la aplicación web, pero se encuentra en una fase de desarrollo muy temprana y precisa de muchas mejoras que puedes consultar en la lista de Issues.