Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

senha ''pass'' não funciona

package br.com.alura.leilao.login;

import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class TestLogin {
    @Test
    public void deveriaLogarTest() {
        System.setProperty("webdriver.chrome.driver",
                "C:\\\\Users\\pamela.santos\\Documents\\2019-selenium-java-projeto_inicial\\drivers\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("http://localhost:8080/login");
        driver.findElement(By.id("username")).sendKeys("fulano");
        driver.findElement(By.id("password")).sendKeys("pass");
        driver.findElement(By.id("botao-login")).submit();

        
        //Verificação
        Assert.assertFalse(driver.getCurrentUrl().equals("http://localhost:8080/login"));
        Assert.assertEquals("fulano", driver.findElement(By.id("usuario-logado")).getText());

        driver.quit();
    }
}

Aba Failure Trace: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

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

11 respostas

Isso pode acontecer por diversas razões, como a senha estar incorreta ou o sistema não reconhecer o usuário.

A primeira coisa que eu faria é verificar se a senha está correta. Talvez você precise mudar a senha no código para a senha correta do usuário "fulano". Se a senha estiver correta e o teste ainda falhar, pode ser que haja algum problema no sistema ou na forma como ele lida com o login.

Dê uma olhada no log de erro para ver se há alguma mensagem útil que indique por que o login está falhando. Pode ser algo relacionado à autenticação, ao processo de login em si ou a algum problema de comunicação com o sistema.

Além disso, certifique-se de que o ambiente de teste está configurado corretamente. Pode ser útil verificar se o usuário "fulano" com a senha "pass" realmente existe no sistema de teste e se as configurações de ambiente estão corretas.

Em resumo, verifique a senha, examine as mensagens de erro e certifique-se de que o ambiente de teste está configurado corretamente. Isso deve ajudar a identificar e resolver o problema.

Oi, eu verifiquei tudo isso, inclusive tentei acessar direto pelo navegador sem ser pelo teste, e mesmo assim nao reconhece a senha ''pass''. No arquivo do banco está com os logins conforme baixei do arquivo do projeto.

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

Oi!

Eu baixei o projeto desse link: https://cursos.alura.com.br/course/selenium-testes-automatizados-aceitacao-java/task/85577

Importei no Eclipse, rodei a classe main (LeilaoApplication), abri a página de login no navegador (http://localhost:8080/login) e conseguir realizar o login com o usuário fulano e a senha pass

Tenta simular dessa forma e continuar a partir desse ponto, pois é o projeto inicial.

Oi, fiz exatamente isso, baixando um novo projeto e repetindo os passos que tu fez e mesmo assim, o user fulano e senha pass nao funcionam. OBS: Tem alguma forma de mudar a senha dentro do projeto? Insira aqui a descrição dessa imagem para ajudar na acessibilidadeNão sei mais o que pode ser, fiz exatamente todos os passos.

package br.com.alura.leilao;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.junit.Assert;

public class HelloWorldSelenium {

    @Test
    public void helloTest() throws InterruptedException {
        System.setProperty("webdriver.chrome.driver",
                "C:\\\\Users\\pamela.santos\\Downloads\\2019-selenium-java-aula_1\\2019-selenium-java-aula_1\\drivers\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("http://localhost:8080/login");
        driver.findElement(By.id("username")).sendKeys("fulano");
        driver.findElement(By.id("password")).sendKeys("pass");
        driver.findElement(By.id("form-login")).submit();
        

        Assert.assertTrue(driver.getCurrentUrl().equals("http://localhost:8080/leiloes"));
        Thread.sleep(20000);
        driver.quit();
    }

}

Manda aqui o log completo que saí no console do Eclipse assim que você executa a classe main

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"#usuario\-logado"}
  (Session info: chrome=119.0.6045.160)
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: 'INF-1690', ip: '192.168.0.17', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_92'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 119.0.6045.160, chrome: {chromedriverVersion: 119.0.6045.105 (38c72552c5e..., userDataDir: C:\Users\PAMELA~1.SAN\AppDa...}, fedcm:accounts: true, goog:chromeOptions: {debuggerAddress: localhost:56552}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:extension:minPinLength: true, webauthn:extension:prf: true, webauthn:virtualAuthenticators: true}
Session ID: e0767931ad0cbf1057b3a32398a4c982
*** Element info: {Using=id, value=usuario-logado}
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    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.login.TestLogin.deveriaLogarTest(TestLogin.java:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    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)

Ele não acha a assertion porque o login não é efetuado: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Teste:

package br.com.alura.leilao.login;

import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class TestLogin {
    @Test
    public void deveriaLogarTest() throws InterruptedException {
        System.setProperty("webdriver.chrome.driver",
                "C:\\\\Users\\pamela.santos\\Documents\\2019-selenium-java-projeto_inicial\\drivers\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("http://localhost:8080/login");
        driver.findElement(By.id("username")).sendKeys("fulano");
        driver.findElement(By.id("password")).sendKeys("pass");

        Thread.sleep(2000);
        driver.findElement(By.id("btnlogin")).click();
        //Assert.assertFalse(driver.getCurrentUrl().equals("http://localhost:8080/leiloes"));
        Assert.assertEquals("fulano", driver.findElement(By.id("usuario-logado")).getText());

        driver.quit();
    }
}

HTML:

<html>
    <head th:replace="~{base :: head}"></head>

    <body>
        <div th:replace="~{base :: logo}"></div>

        <div class="container">
            <div th:replace="~{base :: titulo('Login')}"></div>

            <div th:if="${param.error}" class="alert alert-danger" role="alert">   
                Usuario e senha invalidos.
            </div>

            <div class="card mb-3">
                <form id="login-form" th:action="@{/login}" class="card-body" method="post">
                    <div class="form-group">
                        <label for="username">Usuario</label>
                        <input id="username" name="username"  class="form-control" placeholder="usuario" autofocus="autofocus">
                    </div>

                    <div class="form-group">
                        <label for="password">Senha</label>
                        <input id="password" type="password" name="password" class="form-control" placeholder="senha">
                    </div>

                    <button id="btnlogin" class="btn btn-primary" type="submit">Login</button>
                </form>
            </div>
        </div>
    </body>
</html>

Digo o console quando você executa o projeto normalmente e não os testes.

Rode a classe main (LeilaoApllication) e manda aqui o log

Adicionei num bloco de notas online por causa do número de caracteres: https://pt.anotepad.com/note/read/7nj4d8px

solução!

Boa! Deu um erro mesmo ao executar o projeto e parece ser algo com a versão do seu Java.

O jeito mais fácil de resolver e você alterar o código da classe UsuarioRepository, que está no pacote src/main/java/br.com.alura.leilao.repositories:

package br.com.alura.leilao.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import br.com.alura.leilao.model.Usuario;

@Repository
public interface UsuarioRepository extends JpaRepository<Usuario, Long> {

    @Query("SELECT u FROM Usuario u WHERE u.nome = :username")
    public Usuario getUserByUsername(String username);

}

Altere o select que está na anotação @Query para:

@Query("SELECT u FROM Usuario u WHERE u.nome = ?1")

Rode novamente o projeto e veja se resolve.

Deu certo, muito obrigada viu :) :) :) Insira aqui a descrição dessa imagem para ajudar na acessibilidade