7
respostas

Teste com JUnit falhando

Pessoal, quando vou executar o teste do sistema Leiloes, a inserçao funciona normalmente mas quando o Selenium vai checar se o usuario foi inserido esta retornando falha na linha 34:

assertTrue(achouNome);

Segue codigo completo:

package br.com.caelum.teste;

import static org.junit.Assert.assertTrue;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class UsuariosSystemTest {

    @Test //indicar que é um teste
    public void deveAdicionarUmUsuario() {//para usar o Junit, nao pode ser um metodo estatico. Tem que ser void nome explicativo
        System.setProperty("webdriver.gecko.driver", "/Users/mauricio/Documents/Projetos/Test_Selenium/webdrivers/firefox/geckodriver");

        WebDriver driver = new FirefoxDriver(); //para rodar no Firefox
        driver.get("http://localhost:8080/usuarios/new");

        WebElement nome = driver.findElement(By.name("usuario.nome"));
        WebElement email = driver.findElement(By.name("usuario.email"));

        nome.sendKeys("Joao Braga");
        email.sendKeys("joao.braga@gmail.com");

        WebElement botaoSalvar = driver.findElement(By.id("btnSalvar")); //encontra o botao
        botaoSalvar.click();

        //garantir que o usuario apareça na listagem

        boolean achouNome = driver.getPageSource().contains("Joao Braga");//pesquisa dentro do codigo fonte
        boolean achouEmail = driver.getPageSource().contains("joao.braga@gmail.com");//pesquisa dentro do codigo fonte

        assertTrue(achouNome);
        assertTrue(achouEmail);

        driver.close();//fechar o drive. Selenium finaliza a comunicacao com o browser


    }

}

Alguem consegue me ajudar?

7 respostas

Oi Mauricio, tudo bem ?

Isso as vezes é comum, o teste rodar mais rápido que o navegador.

O que você pode fazer, é forçar que o teste espere alguns instantes, fazendo isso :

Thread.sleep(15)

Isso faz com que a Thread durma 15 milissegundos.

Obrigado pela resposta Matheus!

No caso, eu coloco esse trecho antes da linha "assertTrue(achouNome);" ?

Depois do botão salvar, quando você faz o click

Ah, otimo! Assim que chegar em casa hoje faço o teste novamente e informo aqui se funcionou.

Obrigado!

Matheus, fiz o teste aqui e permanece com erro na linha do assertTrue. Segue codigo modificado:

package br.com.caelum.teste;

import static org.junit.Assert.assertTrue;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Sleeper;

public class UsuariosSystemTest {

    @Test //indicar que é um teste
    public void deveAdicionarUmUsuario() throws InterruptedException {//para usar o Junit, nao pode ser um metodo estatico. Tem que ser void nome explicativo
        System.setProperty("webdriver.gecko.driver", "/Users/mauricio/Documents/Projetos/Test_Selenium/webdrivers/firefox/geckodriver");

        WebDriver driver = new FirefoxDriver(); //para rodar no Firefox
        driver.get("http://localhost:8080/usuarios/new");



        WebElement nome = driver.findElement(By.name("usuario.nome"));
        WebElement email = driver.findElement(By.name("usuario.email"));

        nome.sendKeys("Ronaldo Luiz de Albuquerque");
        email.sendKeys("ronaldo2009@terra.com.br");

        WebElement botaoSalvar = driver.findElement(By.id("btnSalvar")); //encontra o botao
        botaoSalvar.click();
        Thread.sleep(15);

        //garantir que o usuário apareça na listagem    

        boolean achouNome = driver.getPageSource().contains("Ronaldo Luiz de Albuquerque");
        boolean achouEmail = driver.getPageSource().contains("ronaldo2009@terra.com.br");

        assertTrue(achouNome);
        assertTrue(achouEmail);

        driver.close();//fechar o drive. Selenium finaliza a comunicacao com o browser


    }

}

Alguem?

Olá Maurício,

por hora tira o Thread.sleep e execute o teste em modo debug, colocando um break point na linha do click no botão. Quando seu teste em debug parar nesta linha, peça para ele executar este click, mas deixe parado na linha que verifica se o nome existe. Ai só ficar de olho no navegador aberto esperando ele terminar de submeter o formulário e carregar a próxima página. Quando ele voltar com a página que tem o nome e o email do usuário, ai sim deixa o debug executar executar as últimas 5 linhas que verificam se o nome e email estão presentes na tela.

Se executando passo a passo o seu teste passar, o problema é que justamente o Selenium está validando antes da nova tela carregar. Ai você precisará usar o WebDriverWait, apresentado na Aula 5, para após o click você pedir para o Selenium esperar a nova página ser carregada.