🧉 BasePage: Creando la configuración e instanciación del WebDriver

🧠 Qué te llevás de esta clase

  • Centralizar la configuración de Selenium en un solo lugar

  • Entender cómo se inicializa el WebDriver en el framework

  • Crear la base sobre la cual van a vivir todas las Page Objects


📖 Explicación en palabras simples

Hasta ahora veníamos usando Selenium de forma bastante directa.

Pero en un framework real, no querés esto:

👉 crear un driver en cada clase
👉 repetir configuración
👉 tener código duplicado

Entonces aparece esta idea:

👉 centralizar todo en una clase base

Esa clase es BasePage.


💡 ¿Qué rol cumple BasePage?

Es la clase que:

  • Inicializa el WebDriver

  • Configura el navegador

  • Provee métodos comunes (como navegar a una URL)

  • Sirve como padre de todas las Page Objects

👉 Es literalmente la columna vertebral del framework.


🧪 Ajuste previo en el Feature

Para simplificar y enfocarnos en la base técnica, dejamos solo un step:

Scenario: I can access the subpages through the navigation bar
  Given I navigate to www.freerangetesters.com

👉 Estamos aislando el problema
👉 Menos ruido, más foco


💻 Implementación de BasePage.java

package pages;

import java.time.Duration;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;

import io.github.bonigarcia.wdm.WebDriverManager;

public class BasePage {

    // Driver compartido por todo el framework
    protected static WebDriver driver;

    // Esperas explícitas (las vamos a usar más adelante)
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));

    // Bloque estático: se ejecuta una sola vez
    static {
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
    }

    // Constructor
    public BasePage(WebDriver driver) {
        BasePage.driver = driver;
    }

    // Método reutilizable para navegación
    public static void navigateTo(String url) {
        driver.get(url);
    }
}

🧠 Qué está pasando realmente (lo importante)

Hay 3 decisiones importantes acá:


1️⃣ Driver estático

protected static WebDriver driver;

👉 Tenemos una sola instancia del driver para todo el framework

Esto simplifica muchísimo el manejo inicial.

Más adelante podríamos hacerlo más robusto (multi-browser, paralelismo, etc.),
pero por ahora esto es más que suficiente.


2️⃣ Bloque estático

static {
    WebDriverManager.chromedriver().setup();
    driver = new ChromeDriver();
}

👉 Esto se ejecuta automáticamente cuando se carga la clase

No necesitás llamar nada manualmente.

Esto significa:

  • El driver se configura solo

  • El navegador se inicializa automáticamente


3️⃣ Método reutilizable

public static void navigateTo(String url)

👉 Centralizamos acciones comunes

En vez de escribir esto en todos lados:

driver.get(...)

usamos:

BasePage.navigateTo(...)

Más limpio, más consistente.


⚠️ Cosas importantes a tener en cuenta

  • ⚠️ El uso de static simplifica, pero no es escalable a nivel enterprise
    → Está perfecto para aprender y para la mayoría de proyectos

  • ⚠️ El WebDriverWait todavía no lo estamos usando
    → Lo vamos a usar más adelante cuando veamos sincronización

  • ⚠️ Si el navegador se abre “solo”, es por el bloque estático
    → No es magia, es Java


🧪 Mini ejercicio

Después de implementar esto:

👉 Ejecutá el step Given

Y fijate:

  • ¿Se abre el navegador?

  • ¿Navega a la URL?

Si eso pasa:

✔️ Ya tenés tu framework empezando a funcionar de verdad


➡️ Qué sigue

En la próxima clase vamos a conectar:

👉 Feature
👉 Step Definitions
👉 Page Object

Y ahí todo empieza a encajar:

  • Lo que escribís en Gherkin

  • Se ejecuta en código

  • Y usa esta BasePage por detrás


Esta clase es donde dejás de escribir scripts…

👉 y empezás a construir un framework de automation 💪

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

Configuración del proyecto

  • Instalación y uso del proyecto Template en GitHub
  • ☕️ Instalando las primeras librerías de nuestro framework
  • 🥗 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.
  • Crear y entender tu sandbox temporal de BuggyBank
  • Cómo llenar campos de texto con la función sendKeys
  • Dropdowns con Selenium Select en BuggyBank
  • 🤖 Cuestionario módulo Selenium
  • ☕️ Actividad: Interactuando con Elementos Usando Selenium WebDriver

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

  • Ejecutar Cucumber por tags desde Gradle y línea de comandos
  • 🧛🏻‍♀️ Backgrounds en Cucumber
  • 😇 Expresiones para mejorar nuestros Feature Files
  • ✋🏻 Expresiones regulares parte 2
  • 💪🏻 Actividad: Organizando Escenarios con Tags en Cucumber

Assertions: Validando comportamiento esperado

  • Ejercicio 1: Filtrando movimientos en nuestra aplicación bancaria
  • Ejercicio 2 BuggyBank transferencia inválida sin cambiar datos
  • Antes de seguir con los ejercicios...un par de mejoras
  • Ejercicio 3 BuggyBank componente de navegación
  • ✓ Nuestra primera validación: Todos los elementos de un dropdown2
  • 🔍 Tipos de Assertions con TestNG
  • Soft Assertions con BuggyBank
  • 🦸🏻‍♂️ Cuestionario módulo Assertions
  • 👾 Actividad: Validación de Comportamiento Usando Assertions

Generación de Reportes con Cucumber

  • Cucumber Reports actuales reportes públicos y locales
  • 📸 Como agregar screenshots de la falla a nuestro reporte
  • 💻 Cuestionario para el módulo de Cucumber avanzado
  • 🤩 Actividad: Generación de Reportes con Cucumber

Selenium potenciado por IA

  • 🦕 Cómo colaborar con un asistente de IA en un proyecto Selenium
  • 🤩 Cómo revisar probar y mejorar código Selenium generado con IA

CICD con Selenium

  • 🐝 Introducción al concepto de CICD
  • 🏢 Configurando GitHub Actions

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