Pessoal, depois que terminei o código do exercício, notei que no enunciado dizia "(você precisará alterar o UsuariosPage e criar o AlteraUsuarioPage)."
Mas cheguei na minha validação OK com o código abaixo. Como estou meio perdido ainda com relação a orientação a objetos, fiquei na dúvida se minha solução também é válida.
Reutilizei os métodos do UsuariosPage para realizar a edição, porque é a mesma tela que é chamada. Sei que o recomendado seria implementar o AlteraUsuariosPage como boa prática, mas para o efeito do exercício proposto pareceu ok.
package Teste.Alura.Cadastro;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class UsuariosSystemTest {
private WebDriver driver;
private UsuariosPage usuarios;
@Before
public void inicializa () {
this.driver = new FirefoxDriver();
this.usuarios = new UsuariosPage(driver);
// visitamos a pagina de usuarios
usuarios.visita();
}
@After
public void encerra(){
driver.close();
}
@Test
public void adicionaUsuario(){
usuarios.novo()
.cadastra("Usuario Qualquer","qualquer@terra.com.br");
assertTrue(usuarios.existeNaListagem("Usuario Qualquer","qualquer@terra.com.br"));
}
@Test
public void loginBranco(){
NovoUsuarioPage form = usuarios.novo();
form.cadastra("", "");
assertTrue(form.camposObrigatorios());
}
@Test
public void addRemoveUsuario(){
usuarios.novo()
.cadastra("Usuario Qualquer","qualquer@terra.com.br");
assertTrue(usuarios.existeNaListagem("Usuario Qualquer","qualquer@terra.com.br"));
usuarios.excluiUsuario(1);
assertFalse(usuarios.existeNaListagem("Usuario Qualquer", "qualquer@terra.com.br"));
}
@Test
public void editarUsuario(){
this.adicionaUsuario();
NovoUsuarioPage edit = usuarios.editaUsuario();
edit.cadastra("Usuario Editado", "email@editado");
assertTrue(usuarios.existeNaListagem("Usuario Editado", "email@editado"));
}
package Teste.Alura.Cadastro;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class UsuariosPage {
private WebDriver driver;
public UsuariosPage(WebDriver driver){
this.driver = driver;
}
public void visita(){
driver.get("localhost:8080/usuarios");
}
public NovoUsuarioPage novo(){
// clica no link de novo usuario
driver.findElement(By.linkText("Novo Usuário")).click();
//retorna a classe que representa a nova pagina
return new NovoUsuarioPage(driver);
}
public boolean existeNaListagem(String nome, String email){
//verifica se ambos aparecem na listagem
return driver.getPageSource().contains(nome) &&
driver.getPageSource().contains(email);
}
public void excluiUsuario(int posicao){
//posicao = 1; // queremos o 1o botao da pagina
driver.findElements(By.tagName("button")).get(posicao-1).click();
// pega o alert que está aberto
Alert alert = driver.switchTo().alert();
// confirma
alert.accept();
}
public NovoUsuarioPage editaUsuario(){
int posicao = 1; // 1o link de editar que aparecer
driver.findElements(By.linkText("editar")).get(posicao-1).click();
return new NovoUsuarioPage(driver);
}
}
package Teste.Alura.Cadastro;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class NovoUsuarioPage {
private WebDriver driver;
public NovoUsuarioPage (WebDriver driver){
this.driver = driver;
}
public void cadastra (String nome, String email){
WebElement txtNome = driver.findElement(By.name("usuario.nome"));
WebElement txtEmail = driver.findElement(By.name("usuario.email"));
txtNome.sendKeys(nome);
txtEmail.sendKeys(email);
txtNome.submit();
}
public void cadastraVazio(String nomeVazio, String emailVazio){
//verifica se ambos campos são obrigatórios no cadastro
WebElement txtNomeVazio = driver.findElement(By.name("usuario.nome"));
txtNomeVazio.submit();
}
public boolean camposObrigatorios(){
return driver.getPageSource().contains("Nome obrigatorio!") &&
driver.getPageSource().contains("E-mail obrigatorio!");
}
}