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

Dúvida no Ex. 2 da Aula 4 - Melhorando nosso código de teste com Page Objects

Olá. Estou com duvida sobre o que fazer em relação ao teste de mensagens de erros. Por exemplo: Quando vou cadastrar um usuário sem nome e sem e-mail, o sistema apresenta uma mensagem informando. Para validar isso eu devo criar um método que vá até o cadastro e depois preencha vazio e clique em Cadastrar e valide as mensagens?! Ex:

public bool CadastraNome()
       public bool CadastraVazio()
        {
            driver.FindElement(By.Name("usuario.nome")).SendKeys("");
            driver.FindElement(By.Name("usuario.email")).SendKeys("");
            driver.FindElement(By.Id("btnSalvar")).Click();
            bool usuario = driver.PageSource.Contains("Nome obrigatorio!");
            bool email = driver.PageSource.Contains("E-mail obrigatorio!");

            return usuario && email;
        }

Pensando desta maneira eu deveria ter um método para cada atributo não preenchido como um apenas para "Nome" outro apenas para "E-mail". Mas isso iria contra a facilidade de manutenção depois, como eu poderia fazer sem ter de criar um método para cada?

public bool CadastraNome(string nome)
        {
            driver.FindElement(By.Name("usuario.nome")).SendKeys(nome);
            driver.FindElement(By.Name("usuario.email")).SendKeys("");
            driver.FindElement(By.Id("btnSalvar")).Click();
            bool email = driver.PageSource.Contains("E-mail obrigatorio!");

 return email;
        }
public bool CadastraEmail(string email)
        {
            driver.FindElement(By.Name("usuario.nome")).SendKeys("");
            driver.FindElement(By.Name("usuario.email")).SendKeys(email);
            driver.FindElement(By.Id("btnSalvar")).Click();
            bool usuario = driver.PageSource.Contains("Nome obrigatorio!");

            return email ;
        }
3 respostas

Veja que o seu objetivo é verificar se ao inserir "vazio" em um campo, uma mensagem é exibida. Perceba que os seus métodos cadastraNome e cadastraEmail são muito semelhantes. Então, podemos extrair as partes comuns para outro método:

public void insereVazioNoCampo(string campo) {
    driver.FindElement(By.Name(campo)).SendKeys("");
    driver.FindElement(By.Id("btnSalvar")).Click();
}
public bool VerificaNome() {
    insereVazioNoCampo("usuario.nome");
    return driver.PageSource.Contains("Nome obrigatorio!");
}
public bool VerificaEmail() {
    insereVazioNoCampo("usuario.email");
    return driver.PageSource.Contains("E-mail obrigatorio!");
}

Essa seria uma ideia. Poderíamos criar um método que recebe duas strings, mas eu não curto muito.

Em caso de grandes formulários, como faríamos? Um método para cada item do formulário?

solução!

Para grandes formulários, se quisermos testar que campos obrigatórios não preenchidos devem exibir mensagem de erro, acho mais interessante deixar tudo num método só.