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

unable do locate element: {method css selector #nome

public class LoginPage {

private static final String URL_LOGIN = "http://localhost:8080/login";

private WebDriver browser;

public LoginPage() {
    System.setProperty("webdriver.chrome.driver", "drivers/chromedriver");
    this.browser = new ChromeDriver();
    this.browser.navigate().to(URL_LOGIN);
}

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

public LeiloesPage efetuarLogin() {
    browser.findElement(By.id("login-form")).submit();
    return new LeiloesPage(browser);
    //passando o proprio navegador browser em uso

}

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

public boolean isPaginaAtual() {
    return browser.getCurrentUrl().contains(URL_LOGIN);
}

public boolean isMensagemDeLoginInvalidoVisivel() {
    return browser.getPageSource().contains("Usuário e senha inválidos");
}

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

}

public class LeiloesTest {

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.efetuarLogin();
    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));

}

}

public class LeiloesPage {

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

private WebDriver browser;

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

public boolean isPaginaAtual() {
    return browser.getCurrentUrl().contains(URL_CADASTRO_LEILAO);
}

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

}

public class CadastroLeilaoPage {

private WebDriver browser;

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

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

}

3 respostas

Veja se em seu html tem um elemento com o id nome.

solução!

Oi Hugo,

Na sua classe LeiloesPage tem essa constante:

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

Mas essa url está incorreta, pois o certo deveria ser: http://localhost:8080/leiloes/new

Deve ser por isso que o Selenium não encontra o elemento de id=nome

Obrigado Rodrigo, foi isso mesmo!!!! Muito obrigado!!!