3
respostas

PageSource nao atualiza após mudar de página

Verifiquei que após clicar em novo usuário, o driver ainda continua com o link da página antiga (/usuarios), diante disto, acontece erro na hora de buscar os campos de usuario e email da pagina /usuarios/new. Diferente da video aula, em cada PageObject, eu adiciono a diretiva driver.get("site") com a url correspondente para que não aconteça erro. Estou utilizando a versao do selenium mais nova. Houve alguma mudança de paradigma em relação a essa mudança de páginas?

3 respostas

Oi Felipe, pode colocar o seu código aqui?

Veja que as linhas onde eu troco a url estão comentadas. O código só funciona quando eu as habilito :). Diferente da video aula, eu uso a mudança de url no decorrer do código. Na video aula, há apenas a inicialização e a medida que o sistema vai sendo testado, o PageSource é atualizado.

public void deveAdicionarUmUsuario(){

    System.setProperty("webdriver.gecko.driver", "/Users/MacOs/Documents/geckodriver");
    WebDriver driver = new FirefoxDriver();
    driver.get("http://localhost:8080/usuarios");
    driver.findElement(By.linkText("Novo Usuário")).click();

    //driver.get("http://localhost:8080/usuarios/new");

    WebElement campoNome = driver.findElement(By.name("usuario.nome"));
    WebElement campoEmail = driver.findElement(By.name("usuario.email"));

    campoNome.sendKeys("Felipe");
    campoEmail.sendKeys("teste@gmail.com");

    driver.findElement(By.id("btnSalvar")).submit();

    //driver.get("http://localhost:8080/usuarios");

    assertTrue(driver.getPageSource().contains("Felipe") && driver.getPageSource().contains("teste@gmail.com"));

}

Olá Felipe,

o seu teste acima realmente não deve passar por conta do atual comportamento dos métodos click e submit do Selenium WebDriver. Estes métodos não esperam a tela terminar a requisição antes de executar a próxima ação. Por exemplo, o teste já começa a procurar pelo campo de usuario.nome antes mesmo da tela do formulário aparecer no Firefox. Tanto que se você colocar alguns breakpoints e executar no modo debug cada uma das linhas, você consegue ver que o teste funciona sem problema. Já o get, que você usou como alternativa, espera a tela terminar de carregar antes de ir para a próxima instrução.

Uma das formas que usamos nas últimas versões do Selenium para resolver este problema dele não esperar a tela carregar é usando o WebDriverWait, que será apresentado na 5° aula deste curso.