🔌 Conectando Feature, Step Def y Page Object Class
🔌 Conectando Feature, Step Def y Page Object Class
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 una Page Object Class para la página principal
Crear el Step Definition que conecta Cucumber con Java
Entender cómo se comunican el
.feature, los steps y Selenium
📖 Explicación en palabras simples
Hasta ahora teníamos piezas separadas:
El
.featuredecía qué queríamos hacerBasePagesabía cómo abrir el navegador y navegarPero todavía faltaba el puente entre Cucumber y Selenium
Ese puente son los Step Definitions.
👉 Cucumber lee el paso escrito en Gherkin
👉 Busca un método Java que coincida con ese texto
👉 Ese método llama a una Page Object
👉 La Page Object usa Selenium para ejecutar la acción
Ese es el flujo completo.
🧩 Creamos PaginaPrincipal.java
Dentro de la carpeta pages, creamos esta clase:
package pages;
public class PaginaPrincipal extends BasePage {
public PaginaPrincipal() {
super(driver);
}
// Método para navegar a www.freerangetesters.com
public void navigateToFreeRangeTesters() {
navigateTo("https://www.freerangetesters.com");
}
}Esta clase representa la página principal de Free Range Testers.
Por ahora tiene una sola responsabilidad:
👉 navegar al sitio.
Más adelante vamos a sumarle más comportamiento.
🧠 Qué significa extends BasePage
public class PaginaPrincipal extends BasePageEsto significa que PaginaPrincipal hereda lo que ya configuramos en BasePage.
O sea:
acceso al
driveracceso al método
navigateToacceso a la estructura base del framework
👉 No estamos empezando de cero en cada clase. Estamos reutilizando.
🥒 Creamos FreeRangeSteps.java
Dentro de la carpeta steps, creamos:
package steps;
import io.cucumber.java.en.Given;
import pages.PaginaPrincipal;
public class FreeRangeSteps {
PaginaPrincipal landingPage = new PaginaPrincipal();
@Given("I navigate to www.freerangetesters.com")
public void iNavigateToFRT() {
landingPage.navigateToFreeRangeTesters();
}
}Este archivo es el puente entre el lenguaje natural del feature y el código Java.
El step del .feature:
Given I navigate to www.freerangetesters.comse conecta con este método:
@Given("I navigate to www.freerangetesters.com")
public void iNavigateToFRT() {
landingPage.navigateToFreeRangeTesters();
}La frase tiene que coincidir.
Si no coincide, Cucumber no sabe qué método ejecutar.
🏃 Ajustamos TestRunner.java
También cambiamos el glue del runner para que apunte al paquete correcto:
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 = "steps",
plugin = { "pretty", "html:target/cucumber-reports" }
)
public class TestRunner {
}La parte importante es esta:
glue = "steps"👉 Esto le dice a Cucumber dónde buscar los Step Definitions.
🔁 El flujo completo
Cuando ejecutás el test, pasa esto:
Cucumber lee el
.featureEncuentra el step
Given I navigate to www.freerangetesters.comBusca un método con
@Givenque coincidaEjecuta
iNavigateToFRT()Ese método llama a
landingPage.navigateToFreeRangeTesters()La Page Object llama a
navigateTo(...)Selenium abre la página
Ese recorrido es el corazón del framework.
⚠️ Errores comunes
❌ Que el texto del feature no coincida con el texto del annotation
❌ Que el
glueapunte mal❌ Que la clase de steps esté en otra carpeta o paquete
❌ Olvidarse de extender
BasePageen la Page Object❌ Instanciar mal la Page Object en los steps
Cuando Cucumber no encuentra los steps, casi siempre el problema está en una de esas cosas.
🧪 Mini ejercicio
Después de implementar esto, ejecutá el test y preguntate:
¿Cucumber encontró el feature?
¿Encontró el step?
¿Se abrió el navegador?
¿Navegó a Free Range Testers?
Si pasa eso, ya conectaste BDD + Java + Selenium.
➡️ Qué sigue
Ahora que el flujo básico está conectado, más adelante vamos a empezar a trabajar con locators e interacción real con elementos de la página.
Por ahora, lo importante es que entiendas esta cadena:
👉 Feature → Step Definition → Page Object → BasePage → Selenium.