🧉 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);
    }

}