2
respostas

NPE

Teoricamente meu fonte está idêntico ao do instrutor e está dando NPE

package br.com.felipe.leilao.acceptance.steps;

import org.junit.Assert;

import br.com.felipe.leilao.e2e.pages.Browser; import br.com.felipe.leilao.e2e.pages.LeiloesPage; import br.com.felipe.leilao.e2e.pages.LoginPage; import io.cucumber.java.pt.Dado; import io.cucumber.java.pt.Entao; import io.cucumber.java.pt.Quando;

public class LoginSteps {

private Browser browser;
private LoginPage loginPage;
private LeiloesPage leiloesPage;

@Dado("o usuario valido")
public void o_usuario_valido() {
    browser = new Browser();
    browser.seed();
    loginPage = browser.getLoginPage();
}

@Quando("realiza login")
public void realiza_login() {
    this.loginPage.realizaLoginComo("fulano", "pass");
}

@Entao("é redirecionado para a pagina de leiloes")
public void é_redirecionado_para_a_pagina_de_leiloes() {
    Assert.assertTrue(this.leiloesPage.estaNaPaginaDeLeiloes());
}

@Dado("o usuario invalido")
public void o_usuario_invalido() {
    browser = new Browser();
    browser.seed();
    loginPage = browser.getLoginPage();
}

@Quando("tenta se logar")
public void tenta_se_logar() {
    this.loginPage.realizaLoginComo("fulano", "xxxx");
}

@Entao("continua na página de login")
public void continua_na_pagina_de_login() {
    Assert.assertTrue(this.loginPage.estaNaPaginaDeLoginComErro());
}

}

O NPE ocorre neste momento: java.lang.NullPointerException at br.com.felipe.leilao.acceptance.steps.LoginSteps.éredirecionadopara_a_pagina_de_leiloes(LoginSteps.java:32) at ✽.é redirecionado para a pagina de leiloes(classpath:features/login.feature:8)

Porém a classe LeiloesPage se encontra com o mesmo método alterado na aula:

package br.com.felipe.leilao.e2e.pages;

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait;

public class LeiloesPage {

private WebDriver driver;

private static String PAGE_URL = "http://localhost:8080/leiloes";

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

public void visita() {
    driver.get(PAGE_URL);
}

public boolean existe(String nomeProduto, String valor, String usuario) {
    return driver.getCurrentUrl().endsWith("/leiloes") && driver.getPageSource().contains(nomeProduto) && 
            driver.getPageSource().contains(valor);
}

public boolean estaNaPaginaDeLeiloes() {
    return this.driver.getCurrentUrl().endsWith("/leiloes");
}

public NovoLeilaoPage visitaPaginaParaCriarUmNovoLeilao() {

    WebDriverWait wait = new WebDriverWait(driver,5);
    wait.until(ExpectedConditions.presenceOfElementLocated(By.id("novo_leilao_link")));

    WebElement href = driver.findElement(By.id("novo_leilao_link"));
    wait.until(ExpectedConditions.elementToBeClickable(href));
    href.click();

    return new NovoLeilaoPage(driver);
}

public DetalhesDoLeilaoPage visitaLeilaoPaginaParaDarLance() {
    driver.findElement(By.linkText("dar lance")).click();
    return new DetalhesDoLeilaoPage(driver);
}

public AlterarLeilaoPage visitaPaginaParaAltearLeilao() {
    driver.findElement(By.linkText("editar")).click();
    return new AlterarLeilaoPage(driver);
}

public DetalhesDoLeilaoPage visitaPaginaDoLeilaoDo(String donoDoLeilao) throws Exception {
    WebDriverWait wait = new WebDriverWait(driver,5);

    String xpath = "//table[@class='table table-hover']/tbody/tr/td[contains(text(),'" +
                    donoDoLeilao+ "')]/following-sibling::td/a";

    wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpath)));

    WebElement href = driver.findElement(
            By.xpath(xpath));

    wait.until(ExpectedConditions.elementToBeClickable(href));

    href.click();

    return new DetalhesDoLeilaoPage(driver);
}

public void esperaCarregar() {
    WebDriverWait wait = new WebDriverWait(driver,5);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h1[contains(text(),'Todos leilões')]")));
}

public boolean naoPodeDarLanceNoLeilaoCriado(String donoDoLeilao) {
    WebElement href = driver.findElement(
            By.xpath("//table[@class='table table-hover']/tbody/tr/td[contains(text(),'" +donoDoLeilao+ "')]/following-sibling::td/a"));
    return href.getText().contains("editar");
}

}

O que será que pode ser? quando eu comento a linha

@Entao("é redirecionado para a pagina de leiloes")
public void é_redirecionado_para_a_pagina_de_leiloes() {
//    Assert.assertTrue(this.leiloesPage.estaNaPaginaDeLeiloes());
}

o teste passa

2 respostas

Obs: ja conferi com os fontes do git tbm na aula 5 e está igual

outra possibilidade que eu tinha visto era o arquivo do login.feature mas tbm se encontra idêntico ao da aula:

language: pt

Funcionalidade: Apenas usuarios cadastrados podem se logar

Cenario: Um usuario valido consegue se logar Dado o usuario valido Quando realiza login Entao é redirecionado para a pagina de leiloes

Cenario: Um usuario invalido não consegue se logar Dado o usuario invalido Quando tenta se logar Entao continua na página de login