🧉 BasePage: Creando la configuración e instanciación del WebDriver
En esta clase estamos haciendo una de las partes fundamentales de nuestro framework y, también, de las más complejas. Atentos a los comentarios que agregué al código y a la clase!
Archivos en los que trabajamos:
A FreeRangeNavegacion.feature, de momento, le vamos a dejar solo un paso, el Given.
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
Ahora, en la BasePage.java es donde va a ocurrir la magia:
package pages;
// Importaciones necesarias
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 {
/*
* Declaración de una variable estática 'driver' de tipo WebDriver
* Esta variable va a ser compartida por todas las instancias de BasePage y sus subclases
*/
protected static WebDriver driver;
/*
* Declaración de una variable de instancia 'wait' de tipo WebDriverWait.
* Se inicializa inmediatamente con una instancia dew WebDriverWait utilizando el 'driver' estático
* WebDriverWait se usa para poner esperas explícitas en los elementos web
*/
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
/*
* Configura el WebDriver para Chrome usando WebDriverManager.
* WebDriverManager va a estar descargando y configurando automáticamente el driver del navegador
*/
static {
WebDriverManager.chromedriver().setup();
//Inicializa la variable estática 'driver' con una instancia de ChromeDriver
driver = new ChromeDriver();
}
/*
* Este es el constructor de BasePage que acepta un objeto WebDriver como argumento.
*/
public BasePage(WebDriver driver) {
BasePage.driver = driver;
}
//Método estático para navegar a una URL.
public static void navigateTo(String url) {
driver.get(url);
}
}