Featured image of post 033 - Proyecto Selenium - Cucumber (III).

033 - Proyecto Selenium - Cucumber (III).

¡Hola a todos!

En esta entrada seguiremos hablando del proyecto Selenium-Cucumber. ¡Comenzamos!

Logos de Cucumber y Selenium.


URL Repositorio: https://github.com/estefafdez/selenium-cucumber


En esta entrada vamos a explicar la sección Configure Environment del proyecto centrándonos en la clase WebDriverFactory y PropertiesHandler.

Configure Environment.

Esta sección se compone de las siguientes clases:

  • CreateDriver.java
  • WebDriverFactory.java
  • PropertiesHandler.java

*Nota: Las clases HandlerRepo.java y Main.java las comentaremos una vez que estén terminadas ya que siguen siendo un WIP.

WebDriverFactory.java

En esta clase tenemos una factoría de Drivers que nos permitirá seleccionar y configurar el Driver de acuerdo a la selección de sistema operativo y navegador seleccionado en el POM.

Empezamos declarando la carpeta en la que se encuentran los ficheros que nos permitirán lanzar los diferentes drivers (Gekodriver para Firefox, Chromedriver…)

Código Java con la declaración de la carpeta de recursos donde están los drivers de cada navegador.

De nuevo creamos un constructor privado y un Singleton pattern para crear una instancia única de la clase:

Código Java del patrón Singleton y el constructor privado de la clase WebDriverFactory.

Y ahora vamos al método más importante de esta clase: createNewWebDriver().

Código Java del método createNewWebDriver(), con los bloques para Firefox, Chrome e IE.

En este método tenemos 3 grandes bloques diferenciados: si el driver seleccionado es Firefox, Chrome o IE.

Para cada uno de ellos comprobamos el valor del parámetro browser que le hemos pasado para ver cuál ha sido el elegido, además del sistema operativo seleccionado. Debemos hacer la distinción de si el sistema operativo es Windows o no, ¿por qué? por que en Linux y Mac, los drivers no tienen extensión (.exe) como sí que tienen en Windows.

Si el driver seleccionado es Firefox, vemos el sistema operativo y devolvemos una nueva instancia del driver seleccionado así como la ruta para el fichero que se debe inicializar al ejecutar el test.

¿Qué se incluye en la carpeta files/software? Pues en esta carpeta encontramos diferentes carpetas por sistema operativo con los drivers disponibles para cada uno de ellos:

Carpetas por sistema operativo dentro de files/software, cada una con los drivers correspondientes.

y después de cada nueva instancia del driver la guardamos en la variable driver y la devolvemos y ya tenemos nuestra instancia del driver creada y configurada con los valores del POM leídos mediante properties.


PropertiesHandler.java

Esta es una clase customizada para gestionar la lectura de properties de un fichero.

Esta clase tiene dos funciones importantes:

getSelectorFromProperties():Código Java del método getSelectorFromProperties() de la clase PropertiesHandler.

¿Qué hace este método? Nos selecciona un fichero .properties donde esté la key que le pasamos y nos de vuelve el selector que necesitamos de ese fichero .properties. ¿Para qué nos sirve esta función? Pues para el siguiente método que contiene la clase.

getCompleteElement()Código Java del método getCompleteElement(), que devuelve un WebElement a partir de un type y una key.

¿Qué hace este método? nos devuelve el WebElement a partir de un type y una key.

¿Qué entendemos por type? Si el elemento lo queremos seleccionar por className, cssSelector, id, linkText, xPath...  ¿y la Key? la key es el valor del elemento a seleccionar que puede ser el nombre de una clase, el nombre del selector css, el ID del elemento… juntos nos devuelve el elemento que usaremos para los métodos ya creados en el proyecto (de los que hablaremos más adelante) y que nos permitirán de forma fácil seleccionar elementos sin tener que poner el xPath directamente en la definición de los tests.

Y hasta aquí las clases de la sección Configure Environment, en las siguientes entradas hablaremos de los Steps definitions para ver cómo se han definido y cómo los podemos usar en los test.

¡Hasta la siguiente entrada!

Built with Hugo
Theme Stack designed by Jimmy