O que são?

Os testes automatizados com Selenium no TestFlow são executados através de Atividades C#, com um template C# específico já disponível para simplificar a integração e execução do Selenium diretamente no TestFlow.

Para que serve? 

Eles ajudam a garantir que aplicações web funcionem corretamente, permitindo:

  • Automação de Testes Funcionais: Simular o comportamento de usuários e verificar se a aplicação responde conforme esperado.
  • Testes Regressivos: Reexecutar testes após alterações no código para garantir que novas atualizações não quebrem funcionalidades existentes.
  • Eficiência: Reduzir o tempo e o esforço necessários para testar manualmente as funcionalidades de uma aplicação, aumentando a produtividade.

Links Uteis

  1. Selenium documentação oficial: https://acesse.dev/mJsMb
  2. Saiba mais sobre os WebDrives: https://encr.pw/bO3RO

Exemplo de Uso

    Passos para Criar uma Atividade C# com Selenium

    Criação da Atividade C#:

    Crie sua Atividade C# no TestFlow.

    • Antes de escrever qualquer código, clique em Carregar Template e selecione o Template Selenium.

    Desenvolvimento do Teste 

    O teste Selenium deve ser implementado dentro do método Test. Você tem duas opções para organizar os testes:

    • Atividade com vários testes: Nessa abordagem, você agrupa diversos testes dentro de uma única Atividade C#, onde cada teste é tratado como um passo separado. Isso facilita o controle do progresso da atividade como um todo.

    • Várias atividades com um teste por atividade: Neste caso, cada atividade C# contém apenas um teste. O WebDriver é instanciado uma vez e adicionado ao contexto, permitindo sua reutilização em outras atividades no mesmo projeto.

    Boas Práticas de Teste

    Siga o padrão Arrange, Act e Assert para estruturar seu código de forma clara e fácil de manter:

    • Arrange: Prepare o ambiente e os dados necessários para o teste, como configurar o navegador, carregar a página e definir os elementos de teste.
    • Act: Execute as ações do teste, como interagir com os elementos da página (clicar em botões, preencher formulários, etc.).
    • Assert: Verifique o resultado, validando se as ações realizadas produziram o comportamento esperado (ex.: login bem-sucedido ou exibição correta de uma mensagem).

    Registro de Resultados e Status

    Registro de Resultados e Status:

    • Para cada teste, registre o resultado no log:


       context.Status.AddStage(int step, string message);


    • Defina o status da atividade conforme o resultado de cada teste:
        • Adicionar alerta em caso de falha:


          context.Status.AddAlert(int step, string message);
    • Marcar o teste como falhado:


     context.Status.SetFailed(string message);


    • Concluir a atividade após o último teste:


    context.Status.SetCompleted(string message);


    • Abaixo está uma imagem que exemplifica a execução de vários testes Selenium dentro de uma única Atividade C#.

    image2023-1-12_11-32-30.png

    Exemplo de Organização de Teste

    • Organize seus testes de forma estruturada, tratando cada teste como um passo dentro da Atividade C#. Assim, cada teste representa uma etapa clara e separada no fluxo da atividade, facilitando o controle e a rastreabilidade dos resultados.

    image2023-1-12_11-40-39.png

    • Definindo os status dos testes em cada passo da atividade. A variável "step", do tipo int, é incrementada no início de cada etapa para acompanhar o progresso e registrar o status de cada teste.image2023-1-12_11-44-10.png

    Certifique-se de fechar o navegador após cada passo, se necessário, ou no último passo, utilizando Dispose para liberar os recursos do WebDriver.

    Instanciar e Reutilizar o WebDriver no TestFlow

    Para otimizar o uso do WebDriver em suas atividades C#, siga estas etapas:

    1. Instancie o WebDriver uma única vez:

      • Ao iniciar a atividade C#, crie o WebDriver apenas uma vez. Isso evita a necessidade de instanciá-lo repetidamente em cada teste, melhorando a eficiência do código.
    2. Adicione o WebDriver ao contexto do TestFlow:

      • Após instanciá-lo, adicione o WebDriver ao contexto da atividade, permitindo que ele seja reutilizado por outras atividades ao longo do projeto:


        context.Resources.Add(_seleniumManager);


        O método context.Resources.Add<T>() registra o WebDriver como um recurso disponível para todas as atividades subsequentes que fazem parte do fluxo de testes.
    3. Acessar o WebDriver em outras atividades:

      • Em qualquer atividade posterior, você pode acessar o WebDriver a partir do contexto do TestFlow, garantindo que o mesmo objeto seja utilizado de maneira eficiente:


         var webDriver = context.Resources.OfType<ISeleniumWebDriverManager>().First().Value;

        Ao criar os testes, siga o padrão Arrange, Act e Assert

    Fechamento do WebDriver

    Definir o status e conclusão do teste:

    • Ao final do seu teste, defina o status e a conclusão para que o sistema registre corretamente o resultado da atividade:

      • Adicionar alerta em caso de alguma observação importante:


        context.Status.AddAlert(int step, string message);


        • Marcar o teste como falhado se o teste não for bem-sucedido:


          context.Status.SetFailed(string message);


        • Marcar o teste como completo no final da execução bem-sucedida:


          context.Status.SetCompleted(string message);


    Exemplo Prático

    Imagine que um analista de TI do sistema RM precise automatizar o processo de login no Portal do Aluno do módulo educacional, garantindo que os alunos possam acessar suas contas e visualizar suas notas de forma confiável. O objetivo dessa automação é validar que o login seja realizado corretamente, verificando se o sistema autentica o aluno com sucesso. Após o login, o teste também deve confirmar se o aluno consegue acessar a área de consulta de notas sem falhas, assegurando que a funcionalidade esteja operando conforme esperado após atualizações ou manutenções no sistema.


    Utilização do Selenium no template da Atividade C#


    O Helper Selenium foi desenvolvido dentro da engine Selenium do TestFlow com o objetivo de facilitar a criação de testes automatizados. Ele oferece uma série de métodos práticos para instanciar e gerenciar o WebDriver, além de manipular elementos da interface de forma eficiente e precisa.

    Esse Helper simplifica todo o processo de automação de testes com o Selenium, fornecendo métodos pré-configurados para:

    • Instanciar e configurar WebDrivers.
    • Interagir com elementos da interface (como botões, campos de texto e links).
    • Controlar o fluxo de navegação em páginas web.
    • Gerenciar o comportamento do navegador (como esperar por condições específicas, clicar em elementos e preencher campos).

    Métodos do Helper Selenium e suas Funções

    Instanciar o WebDriver

    • Instanciar o WebDriver do Chrome com opções:


      var options = new ChromeOptions(); options.AddArgument("–incognito"); _seleniumManager.SetupChromeDriver(options);


    • Instanciar o WebDriver do Chrome de um diretório específico:


      _seleniumManager.SetupChromeDriver(@"C:\MeuChromeDriverDiretorio", new ChromeOptions());


    • Instanciar um WebDriver diferente do Chrome com opções (Exemplo: Firefox):


      var firefoxDriver = new FirefoxDriver(new FirefoxOptions()); _seleniumManager.UpdateWebDriver(firefoxDriver);


    • Atualizar a largura e altura da janela do WebDriver:


      _seleniumManager.UpdateWindowSize(1920, 1080);


    Espera por Elementos

    • Esperar por um elemento usando By e um tempo em milissegundos:


      _seleniumManager.Wait(By.Id("botao"), 5000);


    • Esperar por um elemento pelo ID:


      _seleniumManager.WaitByElementId("botao", 5000);


    • Esperar utilizando uma função de expressão e o WebDriver:


      _seleniumManager.Wait(drv => drv.FindElement(By.Id("botao")), 5000);


    • Esperar até que o elemento seja clicável usando ExpectedConditions:



      _seleniumManager.WaitForCondition(ExpectedConditions.ElementToBeClickable(By.CssSelector(selector)), 5);


    Outras Esperas por Condição e Tempo

    • Esperar até o elemento existir usando o ID e um tempo limite:


      _seleniumManager.WaitByElementIdUntilElementExists("botao", 5);


    • Esperar até o elemento ser clicável usando o ID e um tempo limite:


      _seleniumManager.WaitByElementIdUntilElementBeClickable("botao", 5);


    • Esperar até o elemento existir usando By:


      _seleniumManager.WaitByUntilElementExists(By.Id("botao"), 5);


    • Esperar até o elemento ser clicável usando By:


      _seleniumManager.WaitByUntilElementBeClickable(By.Id("botao"), 5);


    • Esperar até o elemento existir utilizando seletor CSS:


      _seleniumManager.WaitByCssSelectorUntilElementExists(".botao", 5);


    • Esperar até o elemento ser clicável utilizando seletor CSS:


      _seleniumManager.WaitByCssSelectorUntilElementBeClickable(".botao", 5)


    Interação com Elementos

    • Clicar em um elemento:


      _seleniumManager.Click(By.Id("botao")); _seleniumManager.ClickByCssSelector("classname"); 
      _seleniumManager.ClickByElementId("botao"); _seleniumManager.Click(By.XPath("xpath"));
    • Navegar para uma URL:

      • Por string:


        _seleniumManager.GoToUrl("https://google.com");
      • Utilizando um objeto Uri:


        _seleniumManager.GoToUrl(new Uri("https://google.com"));
    • Maximizar a janela do navegador:


      _seleniumManager.Maximize();
    • Preencher um campo de texto:


      _seleniumManager.SendKeys(By.Id("campoTexto"), "texto"); _seleniumManager.SendKeysByElementId("campoTexto", "texto"); 



      _seleniumManager.SendKeysCssSelector("form", "texto"); _seleniumManager.SendKeys(By.XPath("xpath"), "texto");



    Finalizar e Liberar Recursos

    • Encerrar o WebDriver e liberar recursos:


      _seleniumManager.Quit();

    Utilização do WebDriver em Múltiplas Atividades

    • Adicionar o WebDriver ao contexto do TestFlow: Para reutilizar o WebDriver em outras atividades, adicione-o ao contexto:


      context.Resources.Add(_seleniumManager, "Selenium Manager");


    Saiba mais

    O Agent do TestFlow utiliza a versão 108.0.5359.71 do Chromedriver, compatível com o Chrome versão 108.0.5359.126. Caso precise usar uma versão diferente do Chromedriver, será necessário instanciá-la manualmente na Atividade C#. Consulte a documentação do Helper Selenium para mais detalhes sobre como carregar drivers personalizados.

    A cada atividade fechar o navegador se necessário. Caso faça isto você deverá instanciar novamente o web driver a cada atividade. Você pode fazer o dispose (Quit) na última atividade de teste.

    FAQ

    P: O que acontece se eu não fechar o WebDriver após um teste? 

    R: Se o WebDriver não for fechado corretamente após o teste (usando webDriver.Quit()), o navegador pode permanecer em execução em segundo plano, consumindo recursos e potencialmente causando problemas de desempenho nos testes subsequentes.

    P: O TestFlow suporta testes de API usando Selenium?

    R: Não diretamente. O Selenium é focado na automação de navegadores para testes de interface de usuário. Para testes de API, você pode usar outra ferramenta de automação de API, como o Postman, em combinação com o TestFlow.

    • Sem rótulos