Selenium es una de las 3 herramientas más utilizadas para automatizar pruebas funcionales, las otras tres son Cypress ,UFT y Katalon Studio.
Selenium es un framework de automatización.
Desde hace años la automatización de pruebas del frontend de las aplicaciones web es muy importante porque al utilizarse metodologías ágiles que hacen incrementos funcionales continuados se necesitan pruebas de regresión y selenium permite automatizar esas pruebas.
Qué es Selenium?
Es una herramienta de automatización de pruebas para aplicaciones web, es de código abierto y se utiliza para automatizar sobre todo pruebas funcionales y de regresión.
También tiene una extensión que se llama Appium y que permite automatizar las pruebas funcionales de app’s para móviles o smartphones.
Selenium se creó en el 2004, no fue la primera herramienta de automatización de pruebas funcionales, esa fue Rational Functional Tester de IBM, pero sí la herramienta que más se popularizó de manera masiva hasta que llego su mejora que es Cypress.
Selenium creado por Jason Huggins en el año 2004 mientras trabajaba como ingeniero en una aplicación web que necesitaba pruebas periódicas, lo creó en JavaScript, pero luego se dio cuenta del potencial de esta herramienta y lo puso como código abierto y lo llamó Selenium Core.
Como comentario diré que Cypress es más rápido, no necesita un controlador para manejar el navegador pero necesitas conocimientos en JavaScript y además no soporta todos los navegadores.
Profundizando
Esta magnífico framework permite Cross-browsing (lanzar la ejecución de una prueba con varios navegadores a la vez) y crear suites de pruebas muy potentes.
Esta herramienta junto con Java y Cucumber, que es un framework para pruebas basado en BDD y en Java, puede hacer pruebas muy mantenibles
Se puede utilizar en plataformas como:
- Windows.
- Linux.
- MacOS.
- Solaris.
Con distintos lenguajes de programación como:
- Java.
- C#.
- Python.
- Ruby.
- JavaScript.
Soporta los 5 navegadores más importantes que son:
- Chrome.
- Firefox.
- Microsoft Edge.
- Safari.
- Opera.
Herramientas como esta son muy importantes porque hoy en día las aplicaciones nunca se terminan, están en continua mejora, añadiendo nuevos requerimientos y mejorándolas continuamente.
Los cambios en el software pueden generar algún error, para eso se realizan las pruebas de regresión ,que son muy repetitivas y que se pierde mucho tiempo en ellas y se suelen automatizar.
Componentes de Selenium
Selenium IDE
Puedes automatizar las pruebas de las aplicaciones web utilizando un grabador de acciones llamado Selenium IDE, viene como una extensión en los navegadores de Firefox y Chrome.
Se puede utilizar por aquellos que no tienen conocimientos en programación ya que permite grabar las acciones que se realizan en una aplicación web y realizar la reproducción.
Selenium RC
Es el componente que permite insertar código JavaScript en los navegadores más importantes para realizar la automatización; requiere de un servidor para ejecutar esos scripts de pruebas.
Sin embargo, Selenium RC ha quedado obsoleto con la aparición de Selenium WebDriver debido a sus funciones de automatización del navegador más eficientes y estables .
En 2009 Selenium RC se fusiono con WebDriver para crear lo que se conoce como Selenium WebDriver o Selenium 2.0 mucho más rápido ya que realiza una llamada directa al navegador.
Selenium WebDriver
Este es el componente más importante porque tiene controladores para los navegadores más utilizados del mercado y soporta bastantes lenguajes de programación como Python, Rubi, Java o C#.
Introducción a Selenium WebDriver
WebDriver realmente es un conjunto de interfaces de programación de aplicaciones, lo que se llama API, está orientado a objetos y permite la utilización de muchos navegadores y lenguajes de programación.
WebDriver permite que se puedan ejecutar en paralelo varias pruebas a la vez y con distintos navegadores.
Para poder llamar a los navegadores se necesitan los controladores de cada uno de los navegadores, esos drivers se descargan y luego hay que poner la ruta de esos navegadores para poder ejecutar el script.
Hoy en día Selenium tiene bibliotecas gratuitas y de código abierto para que se puedan automatizar distintos tipos de pruebas en aplicaciones web .
Como comenté en Selenium los scripts de pruebas pueden crearse en lenguajes como Ruby, Python, Perl, Java, PHP y C#, pero lo más popular es utilizar Python y Java.
Componentes de WebDriver
Son los 4 componentes de arriba, las librerías de Selenium en el lenguaje que vallamos a utilizar, el protocolo JSON, los controladores de los navegadores y los navegadores en sí mismo.
Cuando creas los scritps de automatización se utilizan las librerías de WebDriver para realizar acciones sobre la aplicación web con métodos de la clase WebDriver y por supuesto si está creando las pruebas en Java necesitaras las librerías de Java JDK 1.7 o 1.8 o en adelante.
JSON Wire Protocol es una notación que tiene el lenguaje de JavaScript para objetos y que sirve para intercambiar datos entre un servidor y el cliente de una aplicación web.
JSON es un formato muy popular y que admite todos los formatos de datos en todos los lenguajes populares como Python, Ruby, Java, C#.
Selenium necesita de los controladores de cada navegador porque son los que reciben las solicitudes de las librerías y luego es este controlador el que arranca el navegador real y ejecuta todas las acciones que hemos creado en nuestra prueba.
Para que se entienda bien, cuando tú ejecutas la prueba sobre Eclipse u otro entorno integrado como Intellij estos comandos se ejecutan y se convierten al formato JSON que es serializado.
Luego se envía al controlador del navegador que envía esas acciones al servidor HTTP que es quien ejecuta esas acciones sobre el navegador.
Por último si todo está correcto el servidor devolverá un 200 u otro código si hay error.
Ventajas e inconvenientes de Selenium
Las ventajas son las siguientes:
- Selenium WebDriver es estable, gratuita de código abierto y portátil.
- Es compatible con Windows, Linux y Mac y además apoya a herramientas como Apache.
- Permite la ejecución de pruebas paralelas.
- Se puede utilizar con framework de pruebas unitarias como JUnit o TestNG.
- Podemos utilizar la integración continua porque se integra con Maven, Docker y Jenkins.
Las desventajas serían las siguientes:
- Selenium solo permite probar aplicaciones web.
- No se puede realizar pruebas en una imagen.
- Necesita a framework de pruebas como JUnit para generar los informes de pruebas.
- No soporta todos los navegadores solo los 5 más importantes.
- Solo tienes soporte en foros, pero no hay soporte profesional las 24 horas.
Ejemplo práctico de una prueba con Selenium
Supongamos que queremos automatizar un caso de prueba que consiste en verificar que un usuario se puede loguear perfectamente en una tienda virtual y que cuando se loguea la aplicación lo envía a la página de inicio de su cuenta, la precondición es que tiene que estar ya registrado en la tienda online.
Primero hay que crear un proyecto de tipo Maven En Intellij, le damos un nombre y se crea.
Dependencias para proyecto con Selenium
Se necesitan estas dependencias para poder automatizar con Selenium además de instalar un JDK que ya puedes instalarlo cuando creas un proyecto Maven.
Creación de clase e importación de clases
Luego se tiene que crear una clase dentro de la carpeta de Test con el nombre de la prueba e importamos todas las clases que necesitamos que sean las que aparecen en la imagen.
Creamos un objeto WebDriver que es quien nos permite manejar todas las librerías de Selenium para detectar objetos por Xpath, por ejemplo, hay más formas, pero esta forma es la que permite que los scripts sean más mantenibles.
Utilizamos la clase By para poner todos los Xpath que vamos a utilizar para detectar los objetos sobre los que vamos a realizar acciones que se enviaran por JSON como vimos.
Creación de variables de objetos
Utilizamos unas variables de tipo string para guardar el usuario y la contraseña, generalmente los datos se suelen guardar en archivos Excel y se tienen que utilizar librerías para manejarlos.
Clases de gestión de métodos
WebDriverManager es una librería que permite gestionar los drivers de distintos navegadores y que se actualicen y descarguen automáticamente, ayuda a no perder tiempo con el mantenimiento de los controladores.
La clase EdgeOptions sirve para añadir opciones a esos navegadores y le indicamos que acepte certificados inseguros y el segundo argumento soluciona un problema.
El método con BeforeEach es para que cada vez que se ejecute una prueba se llame al método setUpDriver porque es quien lanza el navegador configurado como queremos mediante nuestro controlador.
El método con AfterAll es para que se ejecute siempre después de que se ejecuten todas las pruebas, como solo es una le digo que cierre navegador y elimine el driver.
Explicación de métodos de Selenium
Voy a comentar que significa cada método:
- El método maximize sirve para maximizar el navegador y la clase Manage nos permite gestionar una ventana y borrar cookies o una cookie en particular, sobre todo.
- El método get permite navegar a una página web, hay que ponerle http o https o dará error al ejecutar el script.
- GetElement es una clase que representa un objeto y el método findElement sirve para encontrar el objeto de la página utilizando su Xpath, CSS Selector.
- El método Click es un método para hacer clic con el ratón sobre un enlace.
- El método getTitle devuelve el título de una página.
- El método sendKeys sirve para enviar texto a un campo de tipo texbox o Area o campos así.
- El método asserEquals permite comparar un valor con otro valor.
- La clase de Java Thread es para controlar la ejecución actual y el método sleep para pararla unos segundos para que le dé tiempo a cargar el elemento o página.
- El método sendKeys sirve para escribir texto en un campo Textbox o TextArea.
El método getText de la imagen de abajo sirve para devolver el texto que haya en el objeto de la página que hayamos identificado.
Recomendaciones
Para ejecutar un script en Intellij solo tenemos que hacer clic con el botón derecho del ratón y en el menú que parece hacer clic en Run Nombre del script o clase.
Si queréis saber mas de automatización de pruebas tenéis mi libro de Scrum. Teoría e implementación práctica donde podéis descargar código.
Por último si os interesa el tema de automatización de pruebas, DevOps o herramientas de QA suscribiros al newsletter porque vamos a escribir artículos muy interesante sobre esos temas.
Visitas: 76