🧉 BasePage: Creando la configuración e instanciación del WebDriver
🧉 BasePage: Creando la configuración e instanciación del WebDriver
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
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
staticsimplifica, pero no es escalable a nivel enterprise
→ Está perfecto para aprender y para la mayoría de proyectos⚠️ El
WebDriverWaittodaví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 💪