📝 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 adicionaremdata-testidnos elementos se os IDs forem dinâmicos. 🏁