19 octubre 2005

La clase java.awt.Robot

La clase java.awt.Robot permite hacer todo lo que puede hacer un usuario. Esta clase simula pulsaciones de teclas, movimientos de ratón y clicks del mismo.

Hay dos posibles utilidades que se me ocurren, aunque seguro que hay más.

La primera es para hacer demos o ayudas. Podemos presentar una aplicación y hacer que el ratón se vaya moviendo de un sitio a otro, haciendo cliks y así ver cómo funciona la aplicación.

La otra posibilidad, quizás más interesante, es para las pruebas unitarias de una interface gráfica.

Cuando se hace código orientado a objetos con clases y demás, se pueden hacer lo que se llaman pruebas unitarias. Estas pruebas consisten en hacer un main() para cada clase y hacer código que pruebe esa clase, para saber si está bien o mal. Por ejemplo, si tengo mi clase Matematicas con un metodo suma (int a, int b) que me devuelve la suma de a y b, la prueba unitaria consistiría en hacer un main que instancie la clase Matematicas y que llame al metodo suma() con varios valores, comprobando que el resultado que devuelve es correcto.

Un requisito habitual de estas pruebas unitarias es que el que va a probar no tenga que hacer nada. Simplemente arrancar la prueba y esta debe darle un OK o un FALLO. Esto es fácil de hacer con determinadas clases, pero casi imposible cuando la clase es una ventana. Si al apretar el botón "ayuda" debe salir una ventana con la ayuda, es muy dificil sólo con código apretar el botón de "ayuda" y ver si sale la ventana.

Aquí es dónde entra la clase java.awt.Robot. Como puede simular el movimiento de ratón y el click, es posible con ella hacer que se pulse el botón "ayuda". En cuanto a ver si la ventana de ayuda es visible, bastaría con preguntarle ventana.isShowing(). Con la clase java.awt.Robot podemos llevar el ratón a un JTextField, hacer click en él para que gane el foco, simular la pulsación de teclas para escribir algo en él, mover el ratón a un botón "Aceptar" y pulsarlo, es decir, la secuencia típica de entrada de datos en un formulario.

No hay comentarios: