🧬 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 o close() fecha apenas a janela atual, o quit() 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. 🚀


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