Sobes.tech
Middle+

¿Cuál patrón consideras más importante después del Page Object?

sobes.tech AI

Respuesta de la IA

Método de Fábrica.

Permite crear objetos sin especificar la clase concreta en el código del cliente. Esto es importante para la flexibilidad y escalabilidad de las pruebas automatizadas, por ejemplo, al trabajar con diferentes navegadores o plataformas.

Ejemplo de uso en el contexto de automatización:

Supongamos que tenemos una interfaz WebDriverFactory y sus implementaciones para diferentes navegadores (ChromeWebDriverFactory, FirefoxWebDriverFactory). El método de fábrica permite obtener una instancia del controlador necesario sin recurrir a construcciones condicionales (if/else) en el código de prueba.

// Interfaz de la fábrica
interface WebDriverFactory {
    WebDriver createDriver();
}

// Implementación para Chrome
class ChromeWebDriverFactory implements WebDriverFactory {
    @Override
    public WebDriver createDriver() {
        WebDriverManager.chromedriver().setup();
        return new ChromeDriver();
    }
}

// Implementación para Firefox
class FirefoxWebDriverFactory implements WebDriverFactory {
    @Override
    public WebDriver createDriver() {
        WebDriverManager.firefoxdriver().setup();
        return new FirefoxDriver();
    }
}

// Uso de la fábrica en la prueba
public class BaseTest {
    protected WebDriver driver;

    @BeforeMethod
    public void setupTest() {
        WebDriverFactory factory = getWebDriverFactory("chrome"); // Obtener la fábrica necesaria (la implementación puede variar)
        driver = factory.createDriver(); // Crear el controlador a través de la fábrica
        driver.manage().window().maximize();
    }

    private WebDriverFactory getWebDriverFactory(String browser) {
        if ("chrome".equalsIgnoreCase(browser)) {
            return new ChromeWebDriverFactory();
        } else if ("firefox".equalsIgnoreCase(browser)) {
            return new FirefoxWebDriverFactory();
        }
        throw new IllegalArgumentException("Navegador no soportado: " + browser);
    }

    @AfterMethod
    public void tearDownTest() {
        if (driver != null) {
            driver.quit();
        }
    }
}

Ventajas:

  • Baja acoplamiento: El código del cliente solo depende de la interfaz de la fábrica, no de las implementaciones concretas.
  • Escalabilidad: Es fácil agregar soporte para un nuevo navegador creando una nueva fábrica y modificando el método getWebDriverFactory.
  • Aislamiento: La lógica de creación del objeto está concentrada en un solo lugar (la fábrica), lo que facilita su mantenimiento.