📝 5.5 Formulários Complexos e Relacionamentos

Sistemas reais possuem dropdowns (<select>), checkboxes e dependências entre cadastros. Para testar um Leilão, precisamos primeiro garantir que um Usuário exista. O segredo está na Orquestração de Page Objects.

🏗️ Interagindo com Elementos Especiais

O Selenium fornece a classe Select para lidar com combos de forma semântica.

📄 src/test/java/…/pages/NovoLeilaoPage.java

public void preenche(String nome, double valor, String dono, boolean usado) {
    var txtNome = driver.findElement(By.name("leilao.nome"));
    var txtValor = driver.findElement(By.name("leilao.valorInicial"));
 
    txtNome.sendKeys(nome);
    txtValor.sendKeys(String.valueOf(valor));
 
    // 👤 Seleção semântica no Combo
    var combo = new Select(driver.findElement(By.name("leilao.usuario.id")));
    combo.selectByVisibleText(dono);
 
    if (usado) {
        driver.findElement(By.name("leilao.usado")).click();
    }
 
    txtNome.submit();
}

🧪 Teste de Independência de Dados

Nunca assuma que o banco já possui dados. O teste deve criar seus próprios pré-requisitos para garantir o determinismo.

@Test
void deveCadastrarLeilaoComDonoExistente() {
    // 1. Criar o Usuário necessário para o teste
    var usuarios = new UsuariosPage(driver);
    usuarios.visita();
    usuarios.novo().comNome("Paulo").comEmail("paulo@tester.com").salva();
 
    // 2. Criar o Leilão associado ao usuário recém-criado
    var leiloes = new LeiloesPage(driver);
    leiloes.visita();
    leiloes.novo().preenche("Geladeira", 1200.0, "Paulo", false);
 
    assertThat(leiloes.existe("Geladeira", 1200.0, "Paulo")).isTrue();
}

📊 Fluxo de Montagem Cruzada

flowchart LR
    A["Teste"] --> B["Page: Usuarios"]
    B --> C["Ação: Criar Paulo"]
    C --> D["Page: Leiloes"]
    D --> E["Ação: Criar Geladeira para Paulo"]
    E --> F["Assert: Sucesso ✨"]
    style C fill:#e3f2fd,stroke:#1e88e5
    style E fill:#f1f8e9,stroke:#558b2f

Dependências Ocultas 🛡️

Se você rodar este teste e ele falhar porque “Paulo” já existe de uma rodada anterior, você tem um problema de Limpeza de Estado. No próximo capítulo, veremos como resetar o banco de dados entre os testes de sistema. 🚀


Dica de Ouro ⚡

Utilize o By.id() sempre que possível. Ele é o localizador mais rápido e estável. Peça aos desenvolvedores Front-end para adicionarem data-testid nos elementos se os IDs forem dinâmicos. 🏁


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