Crear un proyecto de pruebas con Visual Studio y Selenium
Saludos. Esta entrada es un tutorial acerca de cómo crear un proyecto de pruebas en Visual Studio utilizando Selenium (por si el título que dice casi lo mismo no es lo suficientemente claro - comentario sarcástico para mí mismo).
¿Qué es Selenium?
Selenium es un conjunto de herramientas de automatización para navegadores, que permite programar y ejecutar pruebas repetitivas para aplicaciones web.Creación del proyecto y adición de Selenium
El tutorial se ha realizado utilizando Visual Studio Community Edition 2017, y C#. Los pasos para crear el proyecto y ejecutar una prueba de ejemplo se describen a continuación:El primer paso es abrir Visual Studio, y crear un nuevo proyecto de pruebas unitarias, a través del menú Archivo > Nuevo > Proyecto, y seleccionando la plantilla Proyecto de Prueba Unitaria (.NET Framework), ubicada en las plantillas instaladas bajo la categoría Visual C# > Prueba.
Luego de ello, se procede a agregar los paquetes de Selenium en la solución. Para ello, se abre el panel del Explorador de soluciones, se da clic derecho sobre el proyecto, y se selecciona la opción Administrar paquetes NuGet.
Esto despliega en pantalla el administrador de paquetes NuGet para el proyecto seleccionado. En él se selecciona la opción Examinar, y se procede a realizar la búsqueda de paquetes con la palabra Selenium.
De la lista obtenida, procedemos a instalar los paquetes Selenium.WebDriver (publicado por Selenium Committers) y Selenium.Support (también publicado por Selenium Committers). Estos paquetes incluyen soporte para los navegadores Internet Explorer y Firefox. Para soportar el navegador Google Chrome, es necesario instalar un paquete que lo contenga, como por ejemplo Selenium.Chrome.WebDriver publicado por jbaranda, el cual incluye el ejecutable del driver en la carpeta bin respectiva del proyecto luego de compilarlo.
Una vez descargados e instalados los paquetes ya estamos listos para realizar nuestra primera prueba.
Primera prueba con Selenium
Para nuestra primera prueba, haremos uso de un formulario de inicio de sesión de un sitio de web de demostración llamado PHPTravels, en la URL http://www.phptravels.net/adminPara ello, abrimos la clase creada al momento de crear el proyecto (por defecto es llamada UnitTest1), y agregamos las referencias para Selenium:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using OpenQA.Selenium; | |
using OpenQA.Selenium.Chrome; |
Luego, agregamos el siguiente método de ayuda para poder verificar si un elemento existe en la página web:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// Verifica si un elemento existe en la página web. | |
/// </summary> | |
/// <param name="wdriver"> | |
/// Instancia de Web Driver. | |
/// </param> | |
/// <param name="buscarPor"> | |
/// Mecanismo de búsqueda. | |
/// </param> | |
/// <returns> | |
/// True si el elemento se encuentra en la página, y false en caso contrario. | |
/// </returns> | |
private static bool ExisteElemento(IWebDriver wdriver, By buscarPor) | |
{ | |
try | |
{ | |
wdriver.FindElement(buscarPor); | |
return true; | |
} | |
catch (NoSuchElementException) | |
{ | |
return false; | |
} | |
} |
Finalmente sustituimos el método de prueba vacío, que fue creado por defecto, y creamos uno nuevo, llamado InicioSesion_ConCredencialesIncorrectas_MuestraAviso que consistirá en probar que si intentamos iniciar sesión ingresando credenciales incorrectas, se nos mostrará en pantalla una notificación indicando el error. El código final de la clase, con el nuevo método, es el siguiente:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using Microsoft.VisualStudio.TestTools.UnitTesting; | |
using OpenQA.Selenium; | |
using OpenQA.Selenium.Chrome; | |
using System.Threading; | |
namespace PruebaSelenium | |
{ | |
[TestClass] | |
public class UnitTest1 | |
{ | |
[TestMethod, ] | |
public void InicioSesion_ConCredencialesIncorrectas_MuestraAviso() | |
{ | |
// Inicializamos la instancia del driver de Selenium para el navegador Google Chrome | |
using (IWebDriver wdriver = new ChromeDriver()) | |
{ | |
// Abrimos la página web de inicio se sesión | |
wdriver.Navigate().GoToUrl("http://www.phptravels.net/admin"); | |
// Maximizamos la ventana | |
wdriver.Manage().Window.Maximize(); | |
// Buscamos el formulario de inicio de sesión | |
var formularioInicioSesion = wdriver.FindElement(By.ClassName("form-signin")); | |
// Buscamos la caja de texto del correo electrónico del usuario, por nombre (name) | |
var cajaTextoUsuarioCorreoElectronico = formularioInicioSesion.FindElement(By.Name("email")); | |
// Hacemos clic en la caja de texto, para seleccionarla | |
cajaTextoUsuarioCorreoElectronico.Click(); | |
// Ingresamos el correo electrónico del usuario | |
cajaTextoUsuarioCorreoElectronico.SendKeys("usuario@prueba.com"); | |
// Buscamos la caja de texto de la contraseña, por su ID | |
var cajaTextoContrasena = formularioInicioSesion.FindElement(By.Name("password")); | |
// Hacemos clic en la caja de texto, para seleccionarla | |
cajaTextoContrasena.Click(); | |
// Ingresamos la contraseña | |
cajaTextoContrasena.SendKeys("contasenamala"); | |
// Buscamos el boton dentro del formulario | |
var botonInicioSesion = formularioInicioSesion.FindElement(By.CssSelector("button.btn[type='submit']")); | |
// Presionamos el botón | |
botonInicioSesion.Click(); | |
// Debido a que el proceso de inicio se sesión es asíncrono, | |
// esperamos un tiempo prudencial a que este finalice | |
// (En este link se describe una forma apropiada de hacer esto: https://stackoverflow.com/a/7312740/806975) | |
Thread.Sleep(5000); // 5 segundos | |
// Verificamos que se muestra el aviso de error | |
Assert.IsTrue(ExisteElemento(wdriver, By.CssSelector("form.form-signin div.alert.alert-danger"))); | |
// Cerramos el driver, y sus ventanas asociadas | |
wdriver.Quit(); | |
} | |
} | |
/// <summary> | |
/// Verifica si un elemento existe en la página web. | |
/// </summary> | |
/// <param name="wdriver"> | |
/// Instancia de Web Driver. | |
/// </param> | |
/// <param name="buscarPor"> | |
/// Mecanismo de búsqueda. | |
/// </param> | |
/// <returns> | |
/// True si el elemento se encuentra en la página, y false en caso contrario. | |
/// </returns> | |
private static bool ExisteElemento(IWebDriver wdriver, By buscarPor) | |
{ | |
try | |
{ | |
wdriver.FindElement(buscarPor); | |
return true; | |
} | |
catch (NoSuchElementException) | |
{ | |
return false; | |
} | |
} | |
} | |
} |
Nota: El código fuente completo se encuentra disponible en GitHub: https://github.com/guillegr123/PruebaSelenium
Ejecutando la prueba unitaria
Para ejecutar la prueba unitaria, seleccionamos el nombre del método a probar, damos clic derecho, y seleccionamos la opción Ejecutar pruebas.Esto abre el panel de Exploador de pruebas, y procede a ejecutar la prueba de forma automatizada, utilizando el navegador Google Chrome, elegido a través del driver utilizado. Se podrá observar como el navegador es abierto, y los pasos descritos en la prueba son ejecutados uno a uno, culminando con la verificación de que el elemento de notificación fue creado.
Una vez culminada la prueba, el resultado de esta es mostrado en el panel del Explorador de pruebas, con un ícono verde en caso de éxito, y uno rojo en caso de fallo.
0 comentarios:
Publicar un comentario