Olá, boa tarde! Finalizei o curso utilizando o chromedriver, porém, ao usar o geckodriver/marionete não estou conseguindo avançar na aula de Page Object.
Para passar nos testes anteriores a esta aula, tive que usar Thread.sleep(3000), porém, nesta aula, ao criar a LoginPage, criei também o método "dormir", para declarar a Thread.sleep(3000) e deixar o código mais limpo. Estou recebendo erro no JUnit apenas no teste deveriaEfetuarLoginComDadosValidos, onde a informação prestada é de que era esperado "fulano" mas estava como "nulo".
Eu acredito que a exceção lançada no public String getNomeUsuarioLogado deve estar em conflito com a Thread.sleep(3000), pois a mesma lança uma throws InterruptedException nos testes em LoginTest. Aproveito a oportunidade para copiar os códigos.
public class LoginTest {
private LoginPage paginaDeLogin;
@BeforeEach
public void beforeEach() {
this.paginaDeLogin = new LoginPage();
}
@AfterEach
public void afterEach() {
this.paginaDeLogin.fechar();
}
@Test
public void deveriaEfetuarLoginComDadosValidos() throws InterruptedException {
paginaDeLogin.preencheFormularioDeLogin("fulano", "pass");
paginaDeLogin.efetuaLogin();
paginaDeLogin.dormir();
Assert.assertFalse(paginaDeLogin.isPaginaDeLogin());
Assert.assertEquals("fulano", paginaDeLogin.getNomeUsuarioLogado());
}
@Test
public void naoDeveriaLogarComDadosInvalidos() throws InterruptedException {
paginaDeLogin.preencheFormularioDeLogin("invalido", "123");
paginaDeLogin.efetuaLogin();
paginaDeLogin.dormir();
Assert.assertTrue(paginaDeLogin.isPaginaDeLoginComDadosInvalidos());
Assert.assertNull(paginaDeLogin.getNomeUsuarioLogado());
Assert.assertTrue(paginaDeLogin.contemTexto("Usuário e senha inválidos."));
}
@Test
public void naoDeveriaAcessarPaginaRestritaSemEstarLogado() throws InterruptedException {
paginaDeLogin.navegaParaPaginaDeLances();
paginaDeLogin.dormir();
Assert.assertTrue(paginaDeLogin.isPaginaDeLogin());
Assert.assertFalse(paginaDeLogin.contemTexto("Dados do Leilão"));
}
} xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
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.exe");
this.browser = new FirefoxDriver();
this.browser.navigate().to(URL_LOGIN);
}
public void fechar() {
this.browser.quit();
}
public void preencheFormularioDeLogin(String username, String password) {
browser.findElement(By.id("username")).sendKeys("username");
browser.findElement(By.id("password")).sendKeys("password");
}
public void efetuaLogin() {
browser.findElement(By.id("login-form")).submit();
}
public void dormir() throws InterruptedException {
Thread.sleep(3000);
}
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(URL_LOGIN + "?error");
}
}
Obrigado pela atenção.