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

Meu teste às vezes funciona e às vezes não

Boa tarde. Estou treinando PageObjects com outros sites além do apresentado no curso e, neste caso, quero efetuar o cadastro desde a Home desde site http://agiletesters.com.br/ de forma automatizada. Bom, o problema é que algumas vezes ele funciona, mas, em determinado momento, ele não troca mais de página sem eu ter feito nenhuma alteração no código, e eu não sei por que isso acontece. Alguém pode me ajudar? Vou colocar abaixo todos os PageObjects do meu projeto.

Minha classe de testes:

[TestFixture]
    public class Testes
    {
        private IWebDriver driver;
        private TelaInicial usuario;

        [SetUp]
        public void SetUp()
        {            
            driver = new ChromeDriver();
            usuario = new TelaInicial(driver);
            driver.Navigate().GoToUrl("http://agiletesters.com.br/");
        }

        [Test]
        public void DeveEfetuarCadastroNoSiteAPartirDaTelaHome()
        {
            usuario.Novo()
                .Cadastro("teste@teste.com", "teste123", "senha12345678", "senha12345678")
                .Select();
        }
    }

Home Page

class TelaInicial
    {
        IWebDriver driver;
        //criando o construtor com o driver pois se eh uma pagina ela deve abrir o driver
        public TelaInicial(IWebDriver driver)
        {
            this.driver = driver;
        }

        public CadastroPage Novo()
        {
            driver.FindElement(By.LinkText("Cadastrar")).Click();
            VisitaCadastro();
            return new CadastroPage(driver);
        }

        private void VisitaCadastro()
        {
            driver.Navigate().GoToUrl("http://agiletesters.com.br/register");
        }
    }

Cadastro Page(onde acontece o erro)

class CadastroPage
    {
        IWebDriver driver;
        public CadastroPage(IWebDriver driver)
        {
            this.driver = driver;
        }

        public AceitarPage Cadastro(string email, string username,string senha1,string senha2)
        {
            IWebElement emailC = driver.FindElement(By.Name("email"));
            emailC.SendKeys(email);
            IWebElement usernameC = driver.FindElement(By.Name("username"));
            usernameC.SendKeys(username);
            IWebElement password = driver.FindElement(By.Name("password"));
            password.SendKeys(senha1);
            IWebElement passwordconfirm = driver.FindElement(By.Name("password-confirm"));
            passwordconfirm.SendKeys(senha2);

            driver.FindElement(By.Id("register")).Click();

            Visita();            
            return new AceitarPage(driver);
        }

        private void Visita()
        {
            driver.Navigate().GoToUrl("http://agiletesters.com.br/register/complete?registered=true");
        }
    }

O erro ocorre no Navigate() desta page, pois ele não avança para a proxima pagina que seria a de aceitar as condições e termos de uso do site.

Aceitar Page

    class AceitarPage
    {
        IWebDriver driver;

        public AceitarPage(IWebDriver driver)
        {
            this.driver = driver;
        }

        public void Select()
        {
            driver.FindElement(By.Name("gdpr_agree_data")).Click();
            driver.FindElement(By.Name("gdpr_agree_email")).Click();

            IWebElement submit = driver.FindElement(By.ClassName("btnbtn-primarybtn-block"));
            submit.Click();
        }

    }
6 respostas

Agora está funcionando, mas eu não mudei nada no código! Apenas compilei e testei de novo pra garantir. Alguém pode me dizer se tem um motivo pra isso acontecer? Editei o tópico para se adequar à nova dúvida.

Oi Fabiana, tudo bem ?

Os testes de aceitação são bem dependentes de recursos externos, pode ser que algo da rede tenha comprometido seus testes.

É algo que acontece.

Oi Matheus, tudo bem e com você? Tem alguma forma de contornar esse problema? Não estou conseguindo avançar nos meus estudos porque os erros estão sendo muito mais frequentes do que os testes passados...Obrigada desde já!

solução!

Quando rodo testes de aceitação em sistemas só quero garantir se o fluxo está correto, então tento isolar o máximo de coisas que o sistema pode causar lentidão, por exemplo, invés de usar um banco de dados pesado, tipo sqlserver, mysql, prefiro usar um em memória tipo o hsqldb que já aumenta a velocidade dos testes.

Outra coisa importante é, nunca tente testar o ambiente de produção, sempre tenha um ambiente de desenvolvimento e/ou ambiente de homologação para testar.

Entendi. Então como estou usando um site já em produção para testar, estou mais propensa a esses erros, certo?

Imagino que sim . :(