🔌 Conectando Feature, Step Def y Page Object Class

🔌 Conectando Feature, Step Def y Page Object Class

🧠 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 .feature decía qué queríamos hacer

  • BasePage sabía cómo abrir el navegador y navegar

  • Pero 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 BasePage

Esto significa que PaginaPrincipal hereda lo que ya configuramos en BasePage.

O sea:

  • acceso al driver

  • acceso al método navigateTo

  • acceso 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.com

se 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:

  1. Cucumber lee el .feature

  2. Encuentra el step Given I navigate to www.freerangetesters.com

  3. Busca un método con @Given que coincida

  4. Ejecuta iNavigateToFRT()

  5. Ese método llama a landingPage.navigateToFreeRangeTesters()

  6. La Page Object llama a navigateTo(...)

  7. 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 glue apunte mal

  • ❌ Que la clase de steps esté en otra carpeta o paquete

  • ❌ Olvidarse de extender BasePage en 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.

Selenium y Cucumber con Java

Comprar ahoraSaber más

Introducción

  • 🧐 ¿Qué vamos a ver en este curso?
  • 🤔 ¿Cómo hacer preguntas?
  • 🔥 Recomendaciones para sacarle el mayor provecho al curso2
  • 💪🏻 Actividades del curso
  • 🧑🏻‍💻 ¿Qué es Selenium WebDriver?
  • 🥒 ¿Qué es Cucumber?
  • 🦾 ¿Qué es Gradle?
  • 🔥 Cuestionario Módulo 1
  • 📍 Actividad módulo 1

Instalaciones para el curso

  • 💻 Instalaciones de JDK, Gradle y extensiones6
  • ⚒️ Creando un proyecto con Java y Gradle para Testing9
  • ☕️ Instalando las primeras librerías de nuestro framework

Configuración del proyecto

  • 📚 Creación de carpetas y una decisión clave sobre la infraestructura de nuestro proyecto4
  • 🤠 Una librería que simplifica todo y nuestro primer test12
  • 🥗 Otra extensión útil de Cucumber2
  • Actividad: Compartiendo tu Setup Inicial y WebDriver Manager

Page Object Model: Teoría e implementación

  • 🧙🏻‍♂️ Page Object Model: ¿Qué es y por qué usarlo?5
  • 🔥 La otra gran decisión de diseño de nuestro Framework: Screenplay vs POM
  • 🔍 Cuestionario Módulo POM
  • ✋🏻 Actividad: Implementando el Page Object Model (POM)

Introducción a Cucumber: Instalación e implementación

  • 📍 Creando nuestro primer Feature y ejecutándolo1
  • 🧉 BasePage: Creando la configuración e instanciación del WebDriver
  • 🔌 Conectando Feature, Step Def y Page Object Class5
  • 🔍 Cuestionario módulo Cucumber
  • 🥒 Actividad: Instalación e Implementación de Cucumber

Localización de Elementos Web con XPath y CSS

  • 👨🏻‍🎓 Locators y consejos
  • 📝 Cheatsheet para construir buenos locators con XPath y CSS
  • 🧑🏻‍💻 Actividad: Dominando Locators con XPath y CSS

Selenium WebDriver: La librería para interactuar con elementos de una página web.

  • 🏃🏽‍♂️‍➡️ La BasePage: La columna vertebral de nuestro framework.
  • 🧹 Limpiando el browser después de ejecutar pruebas
  • 💬 Llenando campos de texto: La función sendKeys() de Selenium
  • 🧠 Dropdowns con Selenium: El objeto Select
  • 👩🏻‍💻 Navegando a todos los links con un solo locator3
  • 🪲 Creando un nuevo scenario y Page Object Classes2
  • 🦀 Scenario 2 El usuario puede elegir un plan al suscribirse
  • 🤖 Cuestionario módulo Selenium
  • ☕️ Actividad: Interactuando con Elementos Usando Selenium WebDriver

Assertions: Validando comportamiento esperado

  • ✓ Nuestra primera validación: Todos los elementos de un dropdown2
  • 🔍 Tipos de Assertions con TestNG
  • 🤖 Las Soft Assertions: Una parte muy conveniente de la librería TestNG
  • 🦸🏻‍♂️ Cuestionario módulo Assertions
  • 👾 Actividad: Validación de Comportamiento Usando Assertions

Cucumber avanzado: Tags, parámetros y mejores prácticas

  • 😱 Tags en Cucumber3
  • 🧛🏻‍♀️ Backgrounds en Cucumber
  • 😇 Expresiones para mejorar nuestros Feature Files
  • ✋🏻 Expresiones regulares parte 2
  • 💪🏻 Actividad: Organizando Escenarios con Tags en Cucumber

Generación de Reportes con Cucumber

  • 🧑🏼‍🔬 Reportes en Cucumber4
  • 📸 Como agregar screenshots de la falla a nuestro reporte
  • 💻 Cuestionario para el módulo de Cucumber avanzado
  • 🤩 Actividad: Generación de Reportes con Cucumber

Ejercicios aplicando lo aprendido

  • 🦸🏻‍♂️ Entrevista Automation: ¿Cómo resolvemos un ejercicio REAL de Selenium Webdriver?1
  • 🧞 Exámen técnico de Automation con Selenium, Java y Cucumber resuelto y explicado.3
  • Actividad Final: Reflexiona y Comparte Tu Aprendizaje en Testing Automatizado

Dejá tu testimonio inmortalizado en la web

  • 🙏🏻 Testimonio