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

A pagina não está sendo direcionada para o fomulario de novo leilão(leiloes/new)

Boa tarde a todos,

Gostaria de saber se alguem poderia me ajudar.... Estou há um bom tempo tentando entender pq não está sendo redirecionado para a pagina leiloes/new.

Quando está com comentário faz o login normalmente porém se eu tirar os comentrário nao faz login e retorna para a pagina de login.

Até os comentarios o teste passa normlmente, depois ele da uma NoSuchException pq nao entra na pagina onde quer prrocurar o nome.

Estou travado nesse problema, desde já agradeço!!

segue meu código:

@Test
public void deveriaCadastrarLeilao() {
    LoginPage paginaDeLogin = new LoginPage();
    paginaDeLogin.preencherFormularioDeLogin("fulano", "pass");
    this.paginaDeLeiloes = paginaDeLogin.efetuaLogin();

//CadastroLeilaoPage paginaDeCadastro = paginaDeLeiloes.carregarFormulario();

// 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));

}

17 respostas

segue as classes completas:

package br.com.alura.leilao.leiloes;

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement;

public class LeiloesPage {

private static final String URL_CADASTRO_LEILAO = "http://localhost:8080/leiloes/new";

private WebDriver browser;

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

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


public CadastroLeilaoPage carregarFormulario() {
    this.browser.navigate().to(URL_CADASTRO_LEILAO);
    return new CadastroLeilaoPage(browser);

}

public boolean isLeilaoCadastrado(String nome, String valor, String data) {
        WebElement linhaDaTabela = this.browser.findElement(By.cssSelector("#tabela-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);
    }

}

package br.com.alura.leilao.leiloes;

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

import org.junit.Assert; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test;

import br.com.alura.leilao.login.LoginPage;

public class LeiloesTeste {

private LeiloesPage paginaDeLeiloes;

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

@Test
public void deveriaCadastrarLeilao() {
    LoginPage paginaDeLogin = new LoginPage();
    paginaDeLogin.preencherFormularioDeLogin("fulano", "pass");
    this.paginaDeLeiloes = paginaDeLogin.efetuaLogin();

    CadastroLeilaoPage paginaDeCadastro = paginaDeLeiloes.carregarFormulario();

    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));

}

}

Oi Daniel,

Posta aqui o código da sua classe LoginPage e também a mensagem de erro quando o teste falha

package br.com.alura.leilao.login;

import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver;

import br.com.alura.leilao.leiloes.LeiloesPage;

public class LoginPage { private static final String URL_LOGIN = "http://localhost:8080/login"; private WebDriver browser;

public LoginPage() {
    System.setProperty("webdriver.gecko.driver", "drivers/geckodriver");
    this.browser = new FirefoxDriver();
    this.browser.navigate().to(URL_LOGIN); 
}

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

public void preencherFormularioDeLogin(String username, String password) {
    browser.findElement(By.id("username")).sendKeys(username);
    browser.findElement(By.id("password")).sendKeys(password);
}

public LeiloesPage efetuaLogin() {
    browser.findElement(By.id("login-form")).submit();
    return new LeiloesPage(browser);
}



public boolean isPaginaDeLogin() {
    return browser.getCurrentUrl().equals(URL_LOGIN);
}

public String getNomeUsuarioLogado() {
    try {
        return browser.findElement(By.id("usuario-logado")).getText();
    } catch (NoSuchElementException e) {
        return null;
    }
}

public void navegaParaPaginaDeLances() {
    this.browser.navigate().to("http://localhost:8080/leiloes/2");        
}

public boolean contemTexto(String texto) {
    return browser.getPageSource().contains(texto);
}

public boolean isPaginaDeLoginComDadosInvalidos() {
    return browser.getCurrentUrl().equals("http://localhost:8080/login?error");
}

}

org.openqa.selenium.NoSuchElementException: Unable to locate element: #nome For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: 'MacBook-Air-de-Daniel.local', ip: 'fe80:0:0:0:1c0e:da1e:2302:4cbb%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.15.7', java.version: '18' Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 101.0.1, javascriptEnabled: true, moz:accessibilityChecks: false, moz:buildID: 20220608170832, moz:geckodriverVersion: 0.31.0, moz:headless: false, moz:processID: 2172, moz:profile: /var/folders/mb/81154zds62z..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: MAC, platformName: MAC, platformVersion: 19.6.0, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify} Session ID: 993d00ba-65b7-43f6-bb5b-0c44451ddf2b *** Element info: {Using=id, value=nome} at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323) at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:372) at org.openqa.selenium.By$ById.findElement(By.java:188) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315) at br.com.alura.leilao.leiloes.CadastroLeilaoPage.cadastrarLeilao(CadastroLeilaoPage.java:21) at br.com.alura.leilao.leiloes.LeiloesTeste.deveriaCadastrarLeilao(LeiloesTeste.java:33) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:577) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)

at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:212) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:208) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:137) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248) at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211) at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:141) at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:98) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)

os teste de login passaram normalmente.

na pagina de LeiloesTeste comeca a falhar na linha (27)

CadastroLeilaoPage paginaDeCadastro = paginaDeLeiloes.carregarFormulario();

O problema parece estar na sua classe CadastroLeilaoPage. Posta o código completo dela aqui também.

package br.com.alura.leilao.leiloes;

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver;

public class CadastroLeilaoPage {

private WebDriver browser;

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

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



public LeiloesPage cadastrarLeilao(String nome, String valorInicial, String dataAbertura) {
    this.browser.findElement(By.id("nome")).sendKeys(nome);
    this.browser.findElement(By.id("valorInicial")).sendKeys(valorInicial);
    this.browser.findElement(By.id("dataAbertura")).sendKeys(dataAbertura);
    this.browser.findElement(By.id("button-submit")).submit();

    return new LeiloesPage(browser);
}

}

    <div class="container">
        <div th:replace="~{base :: titulo('Novo Leilão')}"></div>
        <form th:action="@{/leiloes}" method="post" th:object="${leilao}" class="card-body">
            <input th:field="*{id}" type="hidden">

            <div class="form-group">
                <label for="nome">Nome:</label>
                <input id="nome" th:field="*{nome}" th:errorclass="is-invalid" class="form-control" placeholder="Nome do leilão">
                <small>Coloque um nome expressivo</small>
                <p class="alert alert-danger" th:if="${#fields.hasErrors('nome')}" th:errors="*{nome}">
            </div>

            <div class="form-group">
                <label for="valorInicial">Valor inicial:</label>
                <input id="valorInicial" th:field="*{valorInicial}" th:errorclass="is-invalid" class="form-control" placeholder="Valor inicial">
                <small>Coloque um valor > 0.1</small>
                <p class="alert alert-danger" th:if="${#fields.hasErrors('valorInicial')}" th:errors="*{valorInicial}">
            </div>

            <div class="form-group">
                <label for="dataAbertura">Data Abertura:</label>
                <input id="dataAbertura" name="dataAbertura" th:value="*{dataAbertura}" 
                th:errorclass="is-invalid" class="form-control" placeholder="Data de abertura" type="text">
                <small>Coloque uma data no formato dd/MM/yyyy</small>
                <p class="alert alert-danger" th:if="${#fields.hasErrors('dataAbertura')}" th:errors="*{dataAbertura}">
            </div>

            <div class="form-group">
                <label for="usuario">Usuário:</label>
                <input th:value="${usuario}" class="form-control" placeholder="Nome do Usuário" type="text" readonly>
            </div>

            <button class="btn btn-primary" id="button-submit" type="submit" role="button">Salvar</button>
        </form>

        <a class="btn btn-primary mt-2" th:href="@{'/leiloes'}" role="button">Voltar</a>
    </div>
</body>

Boa tarde Professor,

Conseuguiu ententender o que pode estar acontecendo? Eu verifiquei tanto o formulario de cadastro de leilao quanto o arquivo index.html e ambos estao com os id's corretos.

Pelo fato de não conseguir acessar a pagina de cadastro de novo leilao não conseigo prosseguir com os demias testes de validação. O problema está sendo o redirecionamento para leiloes/new.

@Test
    public void deveriaCadastrarLeilao() {
        LoginPage paginaDeLogin = new LoginPage();
        paginaDeLogin.preencherFormularioDeLogin("fulano", "pass");
        this.paginaDeLeiloes = paginaDeLogin.efetuaLogin();

Quando eu rodo o teste assim não da problema nenhum, faz o login normalmente e entra na pagina da lista de lieloes cadastrados. Porém quando rodo o teste assim:

@Test
        public void deveriaCadastrarLeilao() {
        LoginPage paginaDeLogin = new LoginPage();
        paginaDeLogin.preencherFormularioDeLogin("fulano", "pass");
        this.paginaDeLeiloes = paginaDeLogin.efetuaLogin();

        CadastroLeilaoPage paginaDeCadastro = paginaDeLeiloes.carregarFormulario();

        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));

Da o erro mencionado e a pagina não faz login, não entra nem na lista de leiloes cadastrados nem na URL leiloes/new, volta para a pagina de login, acredito que por isso ele nao acha o elemento #nome buscado pelo css selector, pois não tem nessa pagina, pq é a pagina de login.

Desde já agradeço sua atenção.

Oi Daniel,

Consegue compartilhar o teu projeto? Via GitHub ou link do google drive

Acabei de colocar no GitHub, segue o link.

https://github.com/dr-saes/danielGit

Obrigado professor!

Professor,

Alguma ideia do que pode estar acontecendo?

Olá Professor.

Primeiramente me desculpe a insistência! Estou gostando bastante do treinamento e gostaria mto de entender o que esta acontecendo com o meu projeto. Já refiz a aula 4 vezes e não consigo ententer onde pode estar sendo o meu erro. Peço novamente a gentileza de me ajudar, acredito que possa ser algum detalhe que esteja passando despercebido. Disponibilizei o meu codigo no GitHub. Desde já agradeço pela sua atenção.

solução!

Oi Daniel,

O código está correto sim.

Acredito que seja algum problema do driver do firefox, pois no Chrome funcionou corretamente.

Oi Rodrigo.

Fiz o download do Chrome, rodei e tudo funcionou normalmente. Acredito que deve mesmo ser um problema com o driver do firefox. Desculpe a insistência! Estou gostanto mto do seu treinamento. Grato pela atenção.