📍 Creando nuestro primer Feature y ejecutándolo
📍 Creando nuestro primer Feature y ejecutándolo
Selenium y Cucumber con Java
Introducción a Cucumber: Instalación e implementación
Introducción a Cucumber: Instalación e implementación
Localización de Elementos Web con XPath y CSS
Localización de Elementos Web con XPath y CSS
Selenium WebDriver: La librería para interactuar con elementos de una página web.
Selenium WebDriver: La librería para interactuar con elementos de una página web.
Assertions: Validando comportamiento esperado
Assertions: Validando comportamiento esperado
Cucumber avanzado: Tags, parámetros y mejores prácticas
Cucumber avanzado: Tags, parámetros y mejores prácticas
Dejá tu testimonio inmortalizado en la web
Dejá tu testimonio inmortalizado en la web
🧠 Qué te llevás de esta clase
Crear tu primer
Feature Filecon CucumberConfigurar el
TestRunnerConectar Gradle con la ejecución de Cucumber
Entender por qué esta primera ejecución puede fallar, y por qué eso está bien
📖 Explicación en palabras simples
Hasta ahora venimos preparando el proyecto.
Ahora vamos a crear nuestro primer escenario en Cucumber.
La idea es simple:
👉 escribir en Gherkin qué comportamiento queremos probar
👉 configurar una clase que sepa ejecutar ese feature
👉 correrlo por primera vez para validar que Cucumber está correctamente conectado
Y ojo con esto:
👉 es esperable que todavía no pase exitosamente
En esta etapa no estamos buscando tener el test completo funcionando.
Estamos buscando confirmar que Cucumber lee el feature, reconoce los steps y nos muestra qué falta implementar.
Eso también es progreso.
⚙️ Ajuste en settings.gradle
Primero dejamos el proyecto con el nombre correcto y sacamos la referencia a app:
rootProject.name = 'SeleniumFreeRange'Esto ayuda a que Gradle entienda nuestro proyecto como una estructura simple, sin módulos extra que no estamos usando.
🏃♂️ Creamos el TestRunner.java
Dentro de la carpeta runner, creamos la clase TestRunner.java:
package runner;
import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/resources",
glue = "src/test/java/steps",
plugin = { "pretty", "html:target/cucumber-reports" }
)
public class TestRunner {}Esta clase cumple un rol muy importante:
👉 le dice a Cucumber dónde están los .feature
👉 le dice dónde buscar los step definitions
👉 define cómo queremos ver los resultados de la ejecución
🥒 Creamos el primer Feature File
Dentro de src/test/resources/features, creamos:
FreeRangeNavigation.featureCon este contenido:
Feature: Navigation bar
To see the subpages
Without logging in
I can click the navigation bar links
Scenario: I can access the subpages through the navigation bar
Given I navigate to www.freerangetesters.com
When I try to access the free sections through the navigation bar
Then I am redirected to the right pageEste escenario todavía está en un nivel bastante general.
Y eso está bien.
Más adelante vamos a mejorar la implementación y conectar estos pasos con Selenium y nuestras Page Object Classes.
Por ahora, queremos que Cucumber pueda leerlo.
🦾 Ajuste en build.gradle
Al final del archivo build.gradle, cambiamos la tarea test:
tasks.named('test') {
systemProperty "cucumber.options", System.getProperty("cucumber.options")
}Esto permite pasar opciones de Cucumber cuando ejecutamos los tests desde Gradle.
⚠️ Por qué puede fallar esta primera ejecución
Cuando corras el test, es muy probable que Cucumber te diga algo como:
You can implement missing steps with the snippets below:Eso no es un error grave.
En realidad, Cucumber te está diciendo:
👉 “Encontré el Feature File”
👉 “Leí el Scenario”
👉 “Pero todavía no sé qué código ejecutar para cada Given/When/Then”
Y eso es exactamente lo que esperamos en este punto.
🧠 Idea clave
Una ejecución fallida también puede ser una buena señal.
En este caso, si Cucumber detecta los pasos pendientes, significa que:
la estructura está bien
el runner está funcionando
el feature está siendo leído
la conexión inicial existe
Todavía no tenemos automatización completa, pero ya conectamos una parte fundamental del framework.
🧪 Mini ejercicio
Después de correrlo, mirá la consola y tratá de identificar:
¿Cucumber encontró el feature?
¿Reconoció el scenario?
¿Te sugirió snippets para implementar los steps?
Si la respuesta es sí, venís perfecto.
➡️ Qué sigue
En la próxima clase vamos a empezar a conectar este feature con código real.
Ahí vamos a crear los Step Definitions y vamos a empezar a unir:
👉 Feature File
👉 Steps
👉 Page Object
👉 Selenium WebDriver
Acá les dejo las clases que creamos y modificamos y su código como referencia.
settings.gradle: Le sacamos que incluya "app" y dejamos solo
rootProject.name = 'SeleniumFreeRange'TestRunner.java
package runner;
import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources",
glue = "src/test/java/steps",
plugin = { "pretty", "html:target/cucumber-reports" })
public class TestRunner {}FreeRangeNavigation.feature
Feature: Navigation bar
To see the subpages
Without logging in
I can click the navigation bar links
Scenario: I can access the subpages through the navigation bar
Given I navigate to www.freerangetesters.com
When I try to access the free sections through the navigation bar
Then I am redirected to the right pageAl final de build.gradle, cambiamos la tarea "test" de la siguiente manera.
tasks.named('test') {
systemProperty "cucumber.options", System.getProperty("cucumber.options")}