O que é Selenium?

Selenium é um conjunto de ferramentas de código aberto multiplataforma, usado para testar aplicações web pelo browser de forma automatizada. Executa testes de funcionalidades da aplicação web e testes de compatibilidade entre browser e plataformas diferentes. É multilinguagem, ou seja, suporta diversas linguagens de programação, como por exemplo C#, Java e Python, e vários navegadores web como o Chrome e o Firefox.

A Tecnologia da Benner implementou APIs que usam recursos do Selenium objetivando facilitar o desenvolvimento de testes dos sistemas da Benner. Implementando funções de teste para todos os componentes da tecnologia, como por exemplo: Campo Texto, Campo Radio, Campo Lógico, Campo Data/Hora, Campo Tabela, Campo Lista, etc., além de Menus, Formulários, Grids, Grids Editáveis entre outros.

Sobre a API

A API de testes automatizados de interface tem o propósito de auxiliar o desenvolvedor a testar as páginas e conteúdos de interface do WES de uma forma automatizada, sem reescrever muito código, eliminando a sobrecarga de replicação ou trabalho direto com o Selenium, otimizando o passo a passo das rotinas de teste. Dessa forma o teste pode acontecer com frequência sem necessidade de ser reescrito ou adaptado, nem tome tempo dos testadores ao acontecer uma nova liberação.

Os testes podem navegar pela interface, aplicar comandos, ter controle sobre as entidades (criando, preenchendo campos, salvando, excluindo), gerar relatórios, entre outros.

Como funciona a API?

A API foi desenvolvida para que pudesse ser utilizada de forma a se aproximar do padrão Page Objects, porém, adaptado para melhor atender o funcionamento do WES. Para isso foram criadas classes que representam 3 fragmentos do WES (com seus itens de teste agrupados). As classes Widget e Campo possuem suas especializações atribuídas na forma de herança, especificando os diferentes tipos de Widgets e Campos, respectivamente:

  • Pagina
  • Widget:
    • Menu
    • Formulario
    • Grid
    • GridEditavel
    • PainelDeComandos
  • Campos:
    • CampoArquivo
    • CampoDataHora
    • CampoLista (select)
    • CampoLogico (booleano ou checkbox)
    • CampoRadio
    • CampoTabela
    • CampoTexto (ou string, ou inteiro, ou número)

Além disso, temos as classes de utilidades que oferecem recursos para melhorar os testes:

  • Dados: usada para carga de dados para formulários a partir de um arquivo.
T CarregarDeXls<T>(string CaminhoDoArquivo, string idTeste);
  • Navegador: usada para interação com o browser como aguardar warmup, escolha de papel, login. cache, etc.
void AcessarUrl(string url);
void AguardarInicializacaoDoWes(int tempoLimite = 30);
void ConfigurarPapelInicial(string papel) => Menu.AlternarPapel(papel);
void Entrar();
void Entrar(string userName, string password);
void LimparCache();
  • Página: interação com componentes da página, como aguardar, clicar, fechar modal, identificar um widget, etc.
void Aguardar(double segundos);
void AguardarCarregamento();
void AguardarModalFechar();
void FecharModal();
IWebElement ObterConteudoModal();
string ObterMensagemGlobal();
T ObterWidgetModal<T>();
T ObterWidget<T>(string id = "");
  • Relatório: obtém informações sobre os eventos do teste.
void EncerrarTeste(bool validacao = true);
void Finalizar();
void GravarCodigo(Status tipo, string mensagem = "");
void GravarExcecao(Status tipo, Exception excecao);
void GravarImagem(Status tipo, string mensagem = "");
void GravarPasso(Status tipo, string mensagem = "");
void Inicializar(string diretorio = null);

Além das classes que representam fragmentos do WES, existem classes estáticas (ou classes com métodos estáticos) que auxiliam no desenvolvimento geral da aplicação de teste. A classe Dados, por exemplo, carrega dados de um arquivo Excel (.xls) e preenche os atributos de uma classe com os nomes correspondentes das colunas.

O WebDriver

Complementando tudo que já vimos até agora, ainda é possível utilizar o WebDriver para adicionar recursos aos testes, adicionando recursos à API.

  • By.id
    • Localiza elementos cujo atributo de ID corresponde ao valor da pesquisa.
      Sintaxe: driver.findElement(By.id(“xxx”));
  • By.name
    • Localiza elementos cujo atributo NAME corresponde ao valor de pesquisa.
      Sintaxe: driver.findElement(By.name(“xxx”));
  • By.className
    • Localiza elementos cujo nome de classe contém o valor de pesquisa (nomes de classes compostas não são permitidos).
      Sintaxe: driver.findElement(By.id(“xxx”));
  • By.css
    • Localiza elementos que correspondem a um seletor CSS.
      Sintaxe: driver.findElement(By.css(“xxx”));
  • By.tagName
    • Localiza elementos cujo nome de tag corresponde ao valor de pesquisa.
      Sintaxe: driver.findElement(By.tagName(“xxx”));
  • By.linkText
    • Localiza elementos âncora cujo texto visível corresponde ao valor de pesquisa.
      Sintaxe: driver.findElement (By.linkText(“xxx”));
  • By.partialLinkText
    • Localiza elementos âncora cujo texto visível contém o valor da pesquisa. Se vários elementos forem correspondentes, apenas o primeiro será selecionado.
      Sintaxe: driver.findElement(By.partialLinkText(“xxx”));
  • By.xpath
    • Localiza elementos que correspondem a uma expressão Xpath.
      Sintaxe: driver.findElement (By.xpath(“xxx”));

Para saber mais

Temos conteúdo sobre o assunto em nossa Wiki, confira os conteúdos:

Além disso, nossos especialistas Oclecio Vincenzo Di Benedetto Junior & Jefferson Gregol gravaram um BE.TECH sobre o assunto, mostrando na prática como se criam testes usando o Selenium e as APIs da Benner (o zip com o código usado na apresentação está aqui), confira:

Você curtiu este post? Deixa seu comentário contando pra gente o que está achando do nosso conteúdo! Te vejo na próxima publicação, um abraço,

Danton C. Franco Junior

#TimeTec

Compartilhe
Autor
Leia mais
Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *