Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no método editar usuário

Olá pessoal, boa noite a todos.

Estou com uma dúvida e não sei porque o meu método de editar um usuário não está passando no JUnit.

public class UsuariosSystemTest {

    private FirefoxDriver driver;
    private UsuariosPage usuarios;

    @Before
    public void inicializa() {
        // Abre o firefox
        driver = new FirefoxDriver();
        // Instanciamos o UsuariosPage
        usuarios = new UsuariosPage(driver);
        // Limpa o banco de dados para os testes
        driver.get("http://localhost:8080/apenas-teste/limpa");
        // visitamos a pagina de listagem dos usuarios
        usuarios.visita();
    }

    @Test
    public void deveEditarUmUsuario(){

        usuarios.novo().cadastrar("Paulo Henrique", "paulo@henrique.com");

        usuarios.altera(1).para("Ronaldo Luiz de Albuquerque", "ronaldo2009@terra.com.br");;

        assertFalse(usuarios.existeNaListagem("Paulo Henrique", "paulo@henrique.com"));
        assertTrue(usuarios.existeNaListagem("Ronaldo Luiz de Albuquerque", "ronaldo2009@terra.com.br"));  

    }

Mensagem de erro do eclipse:

java.lang.AssertionError
    at org.junit.Assert.fail(Assert.java:86)
    at org.junit.Assert.assertTrue(Assert.java:41)
    at org.junit.Assert.assertFalse(Assert.java:64)
    at org.junit.Assert.assertFalse(Assert.java:74)
    at br.com.caelum.teste.aula4.UsuariosSystemTest.deveEditarUmUsuario(UsuariosSystemTest.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

Além disso, quando passo o mouse no próprio sistema para editar um usuário aparece no canto inferior direito a referência abaixo mesmo acessando a URL para limpar o banco de dados no meu construtor:

http://localhost:8080/usuarios/57/edit

Não sei porque o contador dos usuários não zerou ao acessar a URL para limpar o banco de dados, ou seja, os usuários continuam a ser contados mesmo após terem sido excluídos do sistema.

Será que alguém poderia me dar ajuda para que o meu teste passe e como devo fazer para solucionar esse problema da contagem dos usuários?

Abraços.

2 respostas

Oi Ricardo,

Só com o código do teste é difícil dizer o que acontece.

Você chegou a debuggar o teste? Pra ver onde ele para de funcionar exatamente?

Um abraço, Maurício

solução!

Olá Maurício, tudo bem?

Eu reparei que ao executar o meu teste o método para() da classe AlteraUsuarioPage estava concatenando os dados da seguinte forma:

Nome

Paulo HenriqueRonaldo Luiz de Albuquerque

Email

paulo@henrique.comronaldo2009@terra.com.br

E consegui resolver o problema limpando os campos antes de preenchê-los para edição:

public void para(String nome, String email){
        // Informa ao Selenium os elementos html correspondentes ao nome e email (Pega os elementos html por meio do nome de cada elemento)
        WebElement txtNome = driver.findElement(By.name("usuario.nome"));
        WebElement txtEmail = driver.findElement(By.name("usuario.email"));

        // Limpa os campos antes de preenchê-los para edição    
        txtNome.clear();
        txtEmail.clear();

        // Preenche os campos do formulário com dados abaixo (Preenche os elementos)
        txtNome.sendKeys(nome);
        txtEmail.sendKeys(email);

        txtNome.submit();
    }

Muito obrigado pela ajuda.

Grande abraço.