Sobes.tech
Middle+

Qual padrão você considera mais importante após o Page Object?

sobes.tech IA

Resposta da IA

Método de Fábrica.

Permite criar objetos sem especificar a classe concreta no código do cliente. Isto é importante para a flexibilidade e escalabilidade dos testes automatizados, por exemplo, ao trabalhar com diferentes navegadores ou plataformas.

Exemplo de uso no contexto de automação:

Suponha que temos uma interface WebDriverFactory e suas implementações para diferentes navegadores (ChromeWebDriverFactory, FirefoxWebDriverFactory). O método de fábrica permite obter uma instância do driver necessário sem recorrer a construções condicionais (if/else) no código de teste.

// Interface da fábrica
interface WebDriverFactory {
    WebDriver createDriver();
}

// Implementação para Chrome
class ChromeWebDriverFactory implements WebDriverFactory {
    @Override
    public WebDriver createDriver() {
        WebDriverManager.chromedriver().setup();
        return new ChromeDriver();
    }
}

// Implementação para Firefox
class FirefoxWebDriverFactory implements WebDriverFactory {
    @Override
    public WebDriver createDriver() {
        WebDriverManager.firefoxdriver().setup();
        return new FirefoxDriver();
    }
}

// Uso da fábrica no teste
public class BaseTest {
    protected WebDriver driver;

    @BeforeMethod
    public void setupTest() {
        WebDriverFactory factory = getWebDriverFactory("chrome"); // Obter a fábrica necessária (a implementação pode variar)
        driver = factory.createDriver(); // Criar o driver através da 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 não suportado: " + browser);
    }

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

Vantagens:

  • Baixo acoplamento: O código do cliente depende apenas da interface da fábrica, não das implementações concretas.
  • Escalabilidade: É fácil adicionar suporte a um novo navegador criando uma nova fábrica e modificando o método getWebDriverFactory.
  • Isolamento: A lógica de criação do objeto está concentrada em um único lugar (a fábrica), o que facilita a manutenção.