🛠️ 5.9 Criador de Cenários Complexos

Testes de sistema avançados (ex: validar o encerramento de um leilão com 10 lances) exigem muitos passos de navegação prévia. Colocar toda essa “sujeira” de setup no teste tira o foco do que está sendo validado. A solução é o padrão Criador de Cenários (Data Builder for System Tests).

🏗️ O Orquestrador de Navegação

O CriadorDeCenarios usa os Page Objects já existentes para preparar o ambiente de forma fluída.

📄 src/test/java/…/system/utils/CriadorDeCenarios.java

public class CriadorDeCenarios {
    private final WebDriver driver;
 
    public CriadorDeCenarios(WebDriver driver) {
        this.driver = driver;
    }
 
    public CriadorDeCenarios comUsuario(String nome, String email) {
        var page = new UsuariosPage(driver);
        page.visita();
        page.novo().comNome(nome).comEmail(email).salva();
        return this; // ⛓️ Permite encadeamento
    }
 
    public CriadorDeCenarios comLeilao(String dono, String produto, double valor) {
        var page = new LeiloesPage(driver);
        page.visita();
        page.novo().preenche(produto, valor, dono, false);
        return this;
    }
}

🧪 Teste de Alta Legibilidade

Note como o teste agora foca 100% na regra de negócio:

@Test
@DisplayName("Deve validar a regra de maior lance após múltiplos lances via UI")
void deveValidarMaiorLance() {
    // 🏗️ Setup Declarativo
    new CriadorDeCenarios(driver)
        .comUsuario("Vendedor", "v@v.com")
        .comUsuario("Comprador 1", "c1@c.com")
        .comUsuario("Comprador 2", "c2@c.com")
        .comLeilao("Vendedor", "Playstation 5", 3000.0);
 
    var lances = new DetalhesLeilaoPage(driver);
    lances.visitaLeilao(1);
    
    lances.darLance("Comprador 1", 3100.0);
    lances.darLance("Comprador 2", 3200.0);
 
    assertThat(lances.getMaiorLance()).isEqualTo(3200.0);
}

📊 Camadas de Abstração E2E

graph TD
    A[Teste JUnit] --> B[Criador de Cenários]
    A --> C[Page Objects]
    B --> C
    C --> D[Selenium Driver]
    style B fill:#fff3e0,stroke:#fb8c00

A Reutilização Inteligente 🛡️

Ao usar Page Objects dentro do seu Criador de Cenários, você garante que qualquer mudança no HTML seja corrigida em um único lugar, mantendo a “Fábrica de Dados” sempre funcional. 🏁


Dica de Ouro ⚡

Para testes de sistema massivos, considere criar uma API de Teste no seu backend que receba um JSON e monte o cenário no banco via SQL. Isso é ordens de magnitude mais rápido do que navegar por 10 telas para criar um cenário de teste. 🚀


⬅️ Capítulo Anterior | Próximo Capítulo ➡️