2
respostas

java.lang.AssertionError

Boa noite Rodrigo. Estou o erro no assert ao realizar a validação das mensagens quando não preencho nada no cadastro de leilão.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeRevirei meu código mas não encontrei o motivo do erro no teste:

package br.com.alura.leilao.cadastroLeilaoPage;

import br.com.alura.leilao.leilao.LeilaoPage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class CadastroLeilaoPage {

    private WebDriver browser;
    public static final String URL_CADASTROLEILAO = "http://localhost:8080/leiloes/new";

    public CadastroLeilaoPage (WebDriver browser){
        this.browser = browser;
    }

    public void fechar(){
        this.browser.quit();
    }

    public LeilaoPage cadastrarLeilao(String nome, String valor, String dataAbertura){
        this.browser.findElement(By.id("nome")).sendKeys(nome);
        this.browser.findElement(By.id("valorInicial")).sendKeys(valor);
        this.browser.findElement(By.id("dataAbertura")).sendKeys(dataAbertura);

        this.browser.findElement(By.id("button-submit")).submit();

        return new LeilaoPage(browser);
    }

    public boolean isPaginaAtual(){
        return browser.getCurrentUrl().equals(URL_CADASTROLEILAO);
    }

    public boolean isMensagensDeValidacao(){
        String pageSource = browser.getPageSource();
        return  pageSource.contains("minimo 3 caracteres")
                && pageSource.contains("não deve estar em branco")
                && pageSource.contains ("deve ser um valor maior de 0.1")
                && pageSource.contains( "deve ser uma data no formato dd/MM/yyyy");
    }
}
package br.com.alura.leilao.leilao;

import br.com.alura.leilao.cadastroLeilaoPage.CadastroLeilaoPage;
import br.com.alura.leilao.login.LoginPage;
import org.junit.Assert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class LeilaoTest {
    private LeilaoPage paginaDeLeiloes;
    private  CadastroLeilaoPage paginaDeCadastro;

    @BeforeEach
    public void beforeEach(){
        LoginPage paginaDeLogin = new LoginPage();
        paginaDeLogin.preencheFormulario("fulano","pass");
        paginaDeLeiloes = paginaDeLogin.submeterFormulario();
        this.paginaDeCadastro =  paginaDeLeiloes.carregarFormulario();

    }

    @AfterEach
    public void afterEach(){
        paginaDeLeiloes.fechar();
    }

    @Test
    public void cadastrarLeilao(){

        String hoje = LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
        String nome = "Leilao do dia " + hoje;
        String valor = "500.00";

        this.paginaDeLeiloes =  paginaDeCadastro.cadastrarLeilao(nome, valor, hoje);
        Assert.assertTrue(paginaDeLeiloes.isLeilaoCadastrado(nome,valor,hoje));

    }

    @Test
    public void validarCadastroDeLeilao(){
        this.paginaDeLeiloes =  paginaDeCadastro.cadastrarLeilao("", "", "");

        Assert.assertFalse(this.paginaDeCadastro.isPaginaAtual());
        Assert.assertTrue(this.paginaDeLeiloes.isPaginaAtual());
        Assert.assertTrue(this.paginaDeCadastro.isMensagensDeValidacao());
    }
}
2 respostas
package br.com.alura.leilao.leilao;

import br.com.alura.leilao.cadastroLeilaoPage.CadastroLeilaoPage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;


public class LeilaoPage {

    public static final String URL_CADASTROLEILAO = "http://localhost:8080/leiloes/new";
    public static final String URL_LISTAGEMLEILAO = "http://localhost:8080/leiloes";


    private WebDriver browser;

    public LeilaoPage(WebDriver browser){
        this.browser = browser;
        browser.navigate().to(URL_LISTAGEMLEILAO);
    }

    public void fechar(){
        this.browser.quit();
    }

    public CadastroLeilaoPage carregarFormulario(){
        browser.navigate().to(URL_CADASTROLEILAO);
        return new CadastroLeilaoPage(browser);
    }

    public boolean isLeilaoCadastrado (String nome, String valor, String data){

        WebElement linhaDaTabela =  this.browser.findElement(By.cssSelector("#leiloes tbody tr:last-child"));
        WebElement colunaNome =  linhaDaTabela.findElement(By.cssSelector("td:nth-child(1)"));
        WebElement colunaDataAbertura =  linhaDaTabela.findElement(By.cssSelector("td:nth-child(2)"));
        WebElement colunaValorInicial =  linhaDaTabela.findElement(By.cssSelector("td:nth-child(3)"));

        return colunaNome.getText().equals(nome)
                && colunaDataAbertura.getText().equals(data) &&
                colunaValorInicial.getText().equals(valor);
    }

    public boolean isPaginaAtual(){
        return browser.getCurrentUrl().contentEquals(URL_LISTAGEMLEILAO);
    }

}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi!

É esse assert que está falhando:

Assert.assertTrue(this.paginaDeCadastro.isMensagensDeValidacao());

Mas olhei seu código todo e não identifiquei o problema :D

Faz o seguinte, altera o seu método isMensagensDeValidacao para imprimir o código fonte da página:

public boolean isMensagensDeValidacao(){
    String pageSource = browser.getPageSource();
    
    System.out.println(pageSource);
    
    return  pageSource.contains("minimo 3 caracteres")
            && pageSource.contains("não deve estar em branco")
            && pageSource.contains ("deve ser um valor maior de 0.1")
            && pageSource.contains( "deve ser uma data no formato dd/MM/yyyy");
}

Roda o teste e veja no console o codigo fonte impresso e mande aqui