Automatización de procesos con selenium
¿Qué es selenium?
Selenium es un conjunto
de utilidades que facilita la labor de obtener juegos de pruebas para
aplicaciones web. Para ello nos permite grabar, editar y depurar casos de
prueba, que podrán ser ejecutados de forma automática e iterativa
posteriormente.
Además de ser una herramienta
para registrar acciones, permite editarlas manualmente o crearlas desde cero.
Las acciones se basan en el uso de diferentes API's en diferentes lenguajes (PHP,
Ruby, JAVA, JavaScript, etc.). Entre sus principales características podemos
nombrar:
- Facilidad de registro y ejecución de los test.
- Referencia a objetos DOM en base al ID, nombre o a través de XPath.
- Auto-completado para todos los comandos.
- Las acciones pueden ser ejecutadas paso a paso.
- Herramientas de depuración y puntos de ruptura (breakpoints).
- Los test pueden ser almacenados en diferentes formatos.
El potencial de esta
herramienta puede ser utilizado para la grabación de las pruebas funcionales
durante la Generación de pruebas de regresión. Con este servicio se
consigue obtener una batería de pruebas automatizadas que podrán ser utilizadas
cuando sea necesario repetir las pruebas.
Recursos
necesarios
Los navegadores más
conocidos compatibles con la utilización de Selenium son:
- IE.
- Mozilla Firefox.
- Google Chrome.
- Safari.
Las componentes de
Selenium que son necesarias para la grabación y ejecución de las pruebas
son:
- Selenium Client v1.0.1: cliente de Selenium, necesario para crear pruebas JUnit con Selenium.
- Selenium IDE v1.0.2: Plugin de Firefox para la grabación de las pruebas, paso a paso.
- Selenium Server v1.0.1: servidor de Selenium, que es el que realiza las pruebas.
Otras consideraciones
La versión de Java necesaria
es la JDK 1.6.0_16 o superior
Es recomendable tener
instalado un entorno de desarrollo, por ejemplo, Eclipse Kepler
Para que las pruebas puedan
ser extendidas para y puedan ser ejecutadas en varios navegadores,
necesitaremos tener instalada la herramienta JUnit.
Selenium IDE
Cómo instalarlo
La instalación de Selenium IDE
al tratarse de un complemento de Firefox es muy sencilla. Podemos descargar e
instalar el complemento desde cualquiera de los siguientes enlaces:
- Página Oficial de Firefox Funciona con Firefox 17.0 - 34.*.
Una vez instalado el
complemento y tras reiniciar Firefox podremos tener acceso a Selenium IDE tanto
desde el menú de herramientas, el cual nos abrirá la aplicación en una nueva
ventana, como desde Ver -> Panel lateral -> Selenium IDE que nos lo
mostrará como un Panel (ver la imagen) dentro de la ventana principal de
Firefox.
Descripción
del Panel
El Panel consta de los
siguientes objetos:
Un menú desplegable con las
siguientes opciones:
- Menú 'Archivo': Permite crear un nuevo 'Test Case', abrir uno existente, guardarlo, exportarlo en varios formatos y lo mismo con los 'Test Suite'.
- Menú 'Editar': contiene las opciones de copiar, pegar, seleccionar, etc...
- Menú 'Options': en este menú se encuentran las opciones de configuración de Selenium y las opciones de selección de formato del visor y del portapapeles. En las opciones de Selenium se puede definir el encoding de los ficheros de test, el tiempo de timeout por defecto, etc.
Debajo del menú existe un
campo de texto que contiene la url base sobre la que se van a grabar las
pruebas.
A continuación, hay una lista
de iconos con los que se puede ejecutar todo el test grabado, ejecutar sólo la
línea seleccionada, pausar la ejecución, iniciar la grabación.
También se dispone de un
selector de velocidad para ajustar la velocidad a la que se ejecutan los test.
Pestaña Table
Contiene una lista con los
comandos que se van grabando según se van realizando las acciones sobre la
pantalla.
Esta pestaña sólo aparece
habilitada cuando se selecciona en el menú “Options” el formato HTML.
Pestaña Source
Muestra el código fuente
generado, en el formato que se haya seleccionado.
Grabación de Pruebas
Tipos de grabación
La grabación de una prueba puede
ser configurada para que se haga de forma automática o manual:
Grabación Automática
Para grabar una prueba
simplemente habrá que habilitar el panel de Selenium IDE en el
navegador Mozilla Firefox, verificar que el botón grabar está activo (debe
quedar de color rojo claro) y empezar a realizar la navegación. Nuestra
navegación quedará registrada, generándose los comandos que correspondan en
cada caso, que se podrán ver en el panel de Selenium IDE.
En el botón secundario del
ratón hay una opción con la cual para cualquier elemento de la página en la que
se navega se muestran las funciones de Selenium disponibles. Esta opción es muy
útil para cuando se quiere verificar que existe un texto en la pantalla o si un
elemento está presente.
Grabación Manual
Para programar las
instrucciones que automatizan la prueba, se deshabilita el botón de grabar, en
la pestaña “Table” se selecciona una línea vacía y en los desplegables que
aparecen en la parte inferior se indica la instrucción.
- El primer desplegable contiene la lista completa de funciones que ofrece Selenium IDE (no incluye el detalle de cada una de ellas ya que, al seleccionarla, en la parte de información podemos ver la operativa de la función seleccionada).
- El segundo combo muestra una lista con todos los indicadores posibles para el elemento sobre el que se quiere realizar la acción (ver Localización de elementos), siempre que se hayan grabado automáticamente, en caso de edición manual aparece vacío.
- En el último campo se introduce el valor que pueda necesitar la función de Selenium para su ejecución, por ejemplo, el texto a introducir en un campo de texto.
En el apartado de referencias
podemos encontrar un enlace a la página oficial de Selenium (Manual
de Referencia) donde se nos muestran todos los comandos
posibles y su descripción.
De la misma forma también se
pueden editar pruebas que ya hayan sido grabadas con anterioridad, editando los
campos que aparecen en la parte inferior de la pestaña “Table” o directamente
en el código generado en la pestaña “Source”.
Identificación de los elementos de la interfaz
Hay comandos de Selenium que
necesitan como parámetro un localizador del elemento sobre el que realizar la
acción. Es muy importante que dicho localizador se resuelva de forma única,
para que la prueba sea correcta, y la acción no se realice sobre un elemento
indeseado. Por otra parte, también debe tenerse en cuenta que el identificador
elegido sea reutilizable en el futuro: por ejemplo, debe evitarse la elección
de un identificador que cambie con cada nueva versión de la aplicación.
Por ello, es muy importante
elegir de manera adecuada los identificadores que vamos a usar en cada caso:
- Id: Es la mejor opción siempre y cuando la página HTML tenga definidos correctamente los identificadores de sus elementos, es decir, que sean únicos e invariantes en el tiempo. En estos casos, el mantenimiento de las pruebas generadas usando este método es prácticamente nulo, y el hecho de añadir o quitar elementos a la página no afecta al 'id' del resto de elementos existentes.
- Name: Por definición, el atributo 'name' de un elemento HTML no tiene que ser único, con lo que el uso de este método de localización no garantiza que la prueba se ejecute de la manera deseada. Además, en funciones que sólo referencian a un elemento (getText, click, type, etc.) la acción se realizaría siempre sobre el primer elemento encontrado, por ejemplo, esta opción no sería válida para hacer click sobre un conjunto de 'radiobuttons' con el mismo nombre.
- Identificador: Ésta es la opción por defecto que Selenium-IDE al grabar las pruebas y consiste en usar el 'id' si existe y si no usar el 'name'.
- Dom: Esta opción utiliza el DOM de la página para hacer referencia a los elementos. El problema que presenta es que cualquier introducción de un nuevo elemento, o reorganización de los existentes, provoca que las referencias cambien, lo que puede invalidar las pruebas grabadas anteriormente.
- XPath: Este método de identificación es similar al anterior, pero en este caso hace uso de la estructura XML que posee todo documento HTML, para así hacer referencia a los elementos mediante una ruta, ya sea absoluta (partiendo desde el elemento /) o relativa (partiendo de un elemento conocido). Posee el mismo problema que el localizador por 'dom' ya que tanto el DOM como el XPATH dependen de la estructura del documento. Además, Xpath devolverá un elemento único siempre que sea una ruta absoluta, en el caso de rutas relativas no se cumple ya que una misma ruta puede ser válida para varios elementos.
- Link: Este método es el más utilizado al querer localizar un enlace. Su uso requiere conocer el texto que va a mostrar dicho enlace en la página HTML, por lo tanto, no es útil en caso de existir enlaces con el mismo texto (devolvería el primero de ellos), enlaces sin texto, o enlaces con texto dinámico.
- CSS: Este localizador consiste en identificar los elementos por sus propiedades de CSS. Este método tampoco garantiza la unicidad del elemento referenciado.
Localizador
|
Único
|
Independencia de la
estructura HTML
|
Compatible JSF
|
Compatible Ext JS
|
id
|
Si
|
Si
|
Si (*)
|
No
|
name
|
No
|
Si
|
Si
|
No
|
identificador
|
No
|
Si
|
Si (*)
|
No
|
dom
|
No
|
No
|
Si
|
Si
|
Xpath
|
Si (**)
|
No
|
Si
|
Si
|
link
|
No
|
Si
|
Si
|
Si
|
css
|
No
|
Si
|
Si
|
Si
|
Reutilización de las pruebas grabadas con Selenium
Impacto de los cambios en la
aplicación sobre las pruebas automatizadas
Dependiendo del cambio
introducido en la aplicación, las pruebas funcionales automatizadas con
anterioridad podrán ser reutilizadas en mayor o en menor medida. Los cambios se
pueden agrupar en:
- Nuevas interfaces: Es el caso en el que se presentan nuevas funcionalidades en la aplicación en forma de nuevas ventanas, sin interferir en las ya existentes más allá de agregar los accesos a las nuevas pantallas. El impacto de estas nuevas funcionalidades sobre las pruebas ya grabadas es muy bajo o incluso nulo, ya que el hecho de que hayan aparecido estas nuevas pantallas no afecta en nada a las ya existentes.
- Modificaciones en funcionalidad de interfaces existentes: Es el caso en el que se modifica la funcionalidad de pantallas ya existentes. El impacto de estos cambios va en función del nivel de cambios introducido. Así cuanto más haya cambiado, mayores serán las modificaciones necesarias en las pruebas automatizadas que incluso puede que requiera una grabación desde cero.
- Cambio en las interfaces existentes sin modificar la funcionalidad: Es el caso en el que se modifica el aspecto y/o contenido de las pantallas, pero sin afectar a la funcionalidad existente: puede ir desde un simple cambio en las hojas de estilo (css) a una reorganización completa de los datos mostrados (cambio en la estructura HTML). En este caso el impacto va a depender mucho del tipo de localizador de elementos que se haya usado. Siempre que se usen localizadores independientes de la estructura del HTML, los cambios no deben afectar. Sin embargo, para aquellos elementos para los que se haya usado un localizador dependiente de la estructura del HTML, habría que revisar si los cambios han afectado a los localizadores.
Un breve ejemplo





No hay comentarios:
Publicar un comentario