🧬 5.6 Infraestrutura Reutilizável com JUnit 5
Repetir a inicialização do WebDriver em todas as classes de teste é um desperdício de código e um pesadelo de manutenção. Na Engenharia de Elite, utilizamos a herança e interfaces para centralizar a infraestrutura operacional.
🏗️ A Classe Base de Automação
Criamos uma classe pai que gerencia o ciclo de vida do navegador, permitindo que as classes filhas foquem apenas nas regras de negócio.
📄 src/test/java/…/base/SystemTest.java
public abstract class SystemTest {
protected WebDriver driver;
@BeforeEach
void setup() {
// ✅ Inicialização centralizada
WebDriverManager.chromedriver().setup();
this.driver = new ChromeDriver();
// Timeout implícito para evitar NoSuchElementException prematuros
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
}
@AfterEach
void teardown() {
// ✅ Encerramento seguro
if (driver != null) {
driver.quit();
}
}
}
---
## 🧪 Especialização do Teste
Seu teste de sistema agora fica extremamente conciso e limpo:
class UsuariosSystemTest extends SystemTest {
@Test
void deveCadastrarUsuario() {
var page = new UsuariosPage(driver);
page.visita();
// ... lógica do teste ...
}
}📊 Arquitetura de Herança Premium
classDiagram class SystemTest { <<abstract>> #WebDriver driver +setup() +teardown() } class UsuariosTest { +deveCadastrar() } class LeiloesTest { +deveCriarLeilao() } SystemTest <|-- UsuariosTest SystemTest <|-- LeiloesTest
driver.quit() vs driver.close() 🛡️
Sempre use
quit(). Enquanto oclose()fecha apenas a janela atual, oquit()encerra toda a instância do driver e fecha todos os processos do sistema operacional ligados ao navegador, liberando memória. 🏁
Dica de Ouro ⚡
Você pode configurar a URL base da aplicação (ex:
http://localhost:8080) como uma variável de ambiente ou propriedade do sistema. Isso permite rodar os mesmos testes contra o ambiente de Staging ou Produção apenas mudando um parâmetro de configuração. 🚀