🛠️ 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. 🚀