Pruebas automáticas de UI con Selenium y C#
Selenium es un framework de pruebas automaticas que nos permite grabar las tareas mas comunes y las no tan comunes que debe de realizar un sitio web, con este framework podemos hacer que la computadora pruebe ese login que te tomo horas crear.
La computadora lo hara cada vez que decidas correr la prueba o si tienes un Continuous Integration Server puedes agregar las pruebas para que cada que compiles te avise cuando lo rompas al estar reparando un bug o implementando otra funcionalidad.
Lo hermoso de esto es que es tan facil como hacer una macro de Excel:
- Grabas la “macro” con Selenium IDE.
- La exportas a código C#.
- La ejecutas como un TestUnit cada que te de la gana.
Pero primero hay que configurar nuestro ambiente.
Instalando Selenium Server
Lo primero que hay que hacer es bajar del sitio de Selenium el servidor que podras encontrar en su seccion de descargas lo podras encontrar bajo el nombre de Selenium Standalone Server.
Despues tendras que decidir donde instalarlo y como es una aplicacion Java tendras que instalar el Java Runtime previamente, para fines practicos lo instalaremos en la misma maquina en la que vamos a desarrollar.
Nota: Es recomendable en un equipo de desarrollo el correr el servidor Selenium en un servidor o maquina virtual con direccion ip fija (o una direccion en el DNS) que sea dedicado a pruebas solamente.
Como siguiente hay que instalar los navegadores que usaremos para correr nuestras pruebas automaticas.
Nota: Puedes tener diferentes maquinas virtuales con diferentes versiones de sistemas operativos y navegadores para ampliar tu capacidad de validar en diferentes configuraciones
Ya que tenemos instalado el servidor y conocemos su ubicacion el siguiente paso es preparar un Firefox para grabar las pruebas cual macro de Excel, para eso utilizaremos un plugin llamado Selenium IDE que podemos descargar de la misma página en la que encontramos el server.
Configurando Xamarin Studio (MonoDevelop)
Vamos a crear una nueva solucion del tipo NUnit (New Solution -> .Net -> NUnit Library Project) y le pondremos SeleniumAuto.Test, después lo que tenemos que hacer es agregar mediante NuGet el assembly Selenium WebDriver y Selenium WebDriver Support Classes, esto lo podras realizar haciendo click derecho en Packages, Seleccionar Add Packages… y despues buscar Selenium WebDriver, repetir todo para Selenium WebDriver Support Classes.
Ahora estamos listos paraponer manos a la obra.
1) Grabando la “macro” con Selenium IDE
En Firefox nos iremos al menu Tools -> Selenium IDE y debermos ver una nueva ventana como la imagen de abajo
Lo primero que hay que hacer es definir la Base Url en la parte de arriba que nos indicara desde donde se iniciara la prueba, despues tendremos que ir a Firefox, abrir una nueva pestaña y navegar hasta la url que definimos como base, en este punto estamos listos para grabar la prueba.
El siguiente paso es presionar el circulo rojo o boton de grabar a la derecha para iniciar a grabar y despues regresar a nuestra pestaña previamente preparada de Firefox para comenzar a realizar las acciones que vamos a automatizar, conforme vayamos realizandolas apareceran en el Selenium IDE.
Para terminar solo hay que volver a presionar el boton de grabar.
2) Exportando a código C#
Este paso es sencillo, solo volvemos al Selenium IDE y nos vamos al menu File -> Export Test Case -> C# / Nunit / WebDriver y guardaremos el archivo con la extension .cs
Tenemos dos tipos diferentes a exportar, el WebDriver y el Remote Control, la recomendacion aqui es usar el WebDriver ya que es la version mas nueva mientras que el Remote Control es de versiones anteriores de Selenium.
Nota: Como podran ver se puede exportar a diferentes lenguajes como Ruby, Python, Java y C#, esto se debe a que Selenium Server expone una API que puede ser consumida por diferentes clientes y que se puede crear un cliente en el lenguaje que tu quieras.
Exportaremos el codigo como NewTest.cs.
3) Ejecutando el código como un TestUnit cada que te de la gana
El siguiente paso es abrir nuestro proyecto Test en Xamarin Studio e importar el archivo que genero Selenium IDE y podremos ver un UnitTest ya programado como el de abajo.
Para correr nuestra prueba tendremos que ir al menu View -> Pads -> Unit Test y en el panel que aparezca presionaremos Run All
En este punto veremos que se abre una ventana de Firefox y comienza a correr la prueba de forma automatica, esto esta muy bien para crear el script pero cuando queremos hacerlo automatico necesitamos enviarlo al servidor con estos dos cambios:
1) Agregaremos el assembly OpenQA.Selenium.Remote; en los using
2) Cambiaremos la linea
csharp driver = new FirefoxDriver(); ==
por
DesiredCapabilities cap = DesiredCapabilities.Firefox (); driver = RemoteWebDriver(new url("server",cap));Donde DesiredCapabilities nos sirve para definir el browser sobre el que vamos a probar y RemoteWebDriver es la conexion con nuestro servidor previamente configurado donde server es la URL del server.
Notas Finales
Como pudimos ver no es estrictamente necesario el server para realizar las pruebas automaticas ya que las podemos correr desde nuestra IDE pero pensando en automatizar todo el proceso, un servidor sera necesario.
Si tienen dudas preguntas o comentarios pueden dejarlos en los comentarios o buscarme por Twitter.
Pruebas automaticas de UI Web con Selenium y C#, un pequeño post en Binamedia(dot)Net http://t.co/MKSdAYvW3t