Selenium Framework

Testes Automatizados em Aplicações Web

Menú


  


  

Definição Framework Selenium Selenese Referência do Selenium Expandindo Selenium Conclusão Duvidas? Autores Referências

Definição

O que é o Selenium?
 Suíte

de ferramentas de teste para sistemas web Abordagens de Automação

 Diferentes

de Testes

 Suporta

Vários Browsers e S.Os

O que é o Selenium?
 Open  Muito

Source Flexível

 Simula

o comportamento do Usuário.

Selenium Framework

Framework Selenium
A

   

Suite Selenium é composta de:
Selenium Core: Selenium IDE: Selenium RC: Selenium Grid: Selenium WebDriver(Novo):

Selenium Core
 Escrito

com JavaScript/DHTML, fazendo com que possa rodar direto no browser por baixo de toda funcionalidade do Selenium RC e IDE. uma linguagem de comando chamada Selenese (será explicado depois)

 Está

 Usa

Selenium IDE
 IDE

Completa. do Firefox.

 Extensão  Grava,

Edita e Reproduz as interações feitas no browser. Necessita conhecer nenhuma Linguagem de Programação

 Não

Selenium IDE
 Scripts

gravados em formato selenese automaticamente código para varias linguagens e frameworks de testes para aprender sobre a API do Selenium

 Gera

 Bom

Selenium IDE

Selenium RC
   

Segue uma Arquitetura Cliente – Servidor Servidor escrito em Java (portabilidade) Flexibilidade de browsers Algumas das tarefas atribuídas ao Servidor são:
  

Receber requisições HTTP Lançar e fechar browsers Interpretar comandos Selenese Proxy HTTP

Selenium RC
 Os

Clientes são Bibliotecas (Drivers)

 Atuam

como Interfaces entre a linguagem de programação e o Servidor

 Possibilita

teste mais robustos

 Flexibilidade

de Linguagens de Programação

Selenium Grid
 Escrito  Testes
 

em Java Paralelos em Múltiplas máquinas

Redução de tempo ( Testes Paralelos) Múltiplas combinações de Ambientes (Browsers e S.Os)

Selenium Grid
 Roda

em Nuvem ou em Clusters de Servidores Servidor Hub distribui o teste para várias maquinas rodando Selenium RC Testes podem ser rodados em servidores nas Nuvens.

 Cluster:

 Nuvem:

Selenium WebDriver
 Mais

nova ferramenta da Suite Selenium com a API WebDriver

 Integração  Selenium  2.0?

2.0!

Selenium WebDriver

Selenium WebDriver

Selenium 1.0 tinha dificuldades: 1. eventos de mouse teclado nativos 2. Same origin policy XSS/HTPP(S) 3. Pop-ups, dialogs(Basic Auth;Certificados auto-assinados; dowload/upload de arquivos)

  

Selenium WebDriver

Webdriver é rápido e limpo framework para automação de teste de browser, criado por Simon Stewart WebDriver suportava poucos browsers(IE, Firefox) Não suportava Testes Paralelos

Selenium WebDriver
 Selenium

2.0 supera as dificuldades da versao anterior, tendo controle do Browser unido ao Selenium ganha:

 WebDriver
 

Testes em Paralelo (Selenium Grid) Multiplicidade de Browsers

Selenese

Selenese
 Linguagem

de comandos para elaboração de Scripts de Teste dentro de tabelas HTML Presente no Selenium Core, que é incluído pelo Selenium IDE e RC comando representa uma linha desta tabela, fazendo referencia a uma função da biblioteca do Selenium Core

 Está

 Cada

Selenese
 Apresenta

o formato de tabela abaixo:
Alvo 1
Alvo 2 Alvo n

Comando 1
Comando 2 Comando n

Valor 1
Valor 2 Valor n

Selenese
 Alvos

e valores são parametros a serem usados em alguma função do Core de Caso de Teste com Selenese
/mypage nameField submitButton name John Smith True John Smith

 Exemplo
MyTest open type click verifyText

Referência do Selenium

Revisão e Observações Importantes

Estrutura na IDE existem 3 campos comando, alvo e valor, onde:
 

Comando: é o local onde se digita a instrução a ser executada; Alvo: é o primeiro parâmetro da função a ser executada. As funções do selenium utilizam este parâmetro para informar qual é o id/name a ser buscado; Valor: é o campo que também é utilizado para identificar, onde a forma de identificação é feita pelo valor, “o campo contém um valor”.

Revisão e Observações Importantes

Diferença entre assert e verify: Assert:
 

Verify:
 

Pára a execução quando ocorre um erro; Mais utilizado para verificar se está na página correta Loga o erro, caso exista, sem parar a execução do teste; Mais para analisar os itens da página.

Revisão e Observações Importantes

Comando waitFor :
Toda instrução que tiver o waitFor fica esperando até que uma outra instrução retorne um valor(true or false) para que a mesma saia dessa espera.

Revisão Prática e Dicas

Procurando por checkbox e radio Button específicos


 


Os checkboxes e os radiosButtons nem sempre possuem um id; No entanto, sempre possuem um name igual aos outros; Para selecionar, precisa-se de um parâmetro diferenciador, que nesse caso existe o value do mesmo, logo é necessário selecionar utilizando 2 tipos de parâmetros ; Dica: utilizar o xpath, pois ele consegue buscar pelo name e o value ao mesmo tempo, exemplo: //input[@name='situacao' and @value='2'] Ele busca por um input que possua um nome situação e o valor específico igual a 2; Logo é possível identificar e clicar, por exemplo, em um radio ou checkbox.

Estrutura de pastas

Pasta config

    

Nesta pasta devemos colocar todos os arquivos de configuração; Dica: deve ser criado um arquivo com as configurações mais utilizadas: Selenium.base: é a primeira url em que o teste vai acessar; Dessa forma, deve ser configurado no arquivo de configuração e não nos arquivos de teste; Exemplo: <link rel="selenium.base" href="https://trunk.voxtecnologia.com.br" />

Elementos identificadores

São os elementos que indicam qual o campo(id ou name) deve ser aplicada a ação, onde pode-se ter:
  


   

Identifier = [id ou nome] id = [id] name = [nome] dom = [expressão javascript] xpath = [expressão a ser aplicada] link = [nome da âncora] css = [regra de css2 ou css3] ui = [regra específica string] UI-Elements

Identificadores: Identifier

Identifier (Identificador):

Esse elemento faz uma busca primeiro pelo elemento id, onde caso não seja possível encontrar, faz a devida busca pelo elemento name.
Ex:

identifier = bola Procura primeiro pelo id=”bola”, caso não encontre tal id o selenium procura pelo name=”bola”.

Identificadores: Id/Name
 Id:

Elementos que procuram pelos respectivos id: o Selenium só busca pelo id;

 Name:

Elementos que procuram pelos respectivos name: o Selenium só busca pelo name do item requisitado.

Identificadores: Dom
 Dom

  

Este elemento possibilita a utilização de javascript para se identificar um elemento na página; Possibilidade em capturar um elemento; Possibilidade em executar funções javascript. Ex: dom=document.getElementById('login') Procura na pagina um elemento que tenha o id login.

Identificadores: XPath

XPath

Esse elemento possibilita localizar de acordo com expressões xpath Ex: xpath=//input[@id='login'] Procura na página um elemento que tenha o id login. Ex: xpath=//input[@id='login' and @class='campo-texto'] Procura na página um elemento com o id login e a classe campo-texto.

Identificadores: Css

Css

Esse elemento torna possível localizar um elemento utilizando regras do tipo css, onde pode ser css2 ou css3; Boa dica: utilizar das propriedades ^=(inicia com), $=(termina com) e *=(possui em) como medida de busca por um elemento. Ex css: css=a[title=${sistema}]

Procura na página pelo elemento a onde possuia o titulo gravado na variável sistema.

Expandindo o Selenium

Estrutura de Codificação
 Quando

não é possível automatizar com a IDE do selenium, o que fazer?
Utilizar o recurso de inclusão de arquivos javascript, onde para acessar no selenium necessita respeitar uma estrutura básica de chamada do objeto: Selenium.prototype.do[NomeDoMetodo]

Selenium.prototype.do[NomeDoM etodo]

Estrutura que cria uma nomeclatura para o Selenium IDE. É possível chamar de duas formas:

nomeDoMetodo: não espera por uma instrução ter um resultado para continuar a execução do caso de teste. nomeDoMetodoAndWait : espera por uma instrução ter um resultado para continuar a execução do caso de teste.

Selenium.prototype.do[NomeDoM etodo]

* Método que realiza o check ou o uncheck do locator * @param locator string * @param value bool */ Selenium.prototype.doCheckByValue = function(locator, value){ value == 'true' ? value = 'checked' : value = ''; this.page().findElement(locator).checked = value; }

Selenium.prototype.do[NomeDoM etodo]

Observações importantes

 Na

estrutura do Selenium é possível informar até dois parâmetros;  Quando é criado o método é necessário colocar o “do” antes do nome do mesmo, onde o doTeste na IDE do Selenium o, método a ser chamado é o teste.

Selenium.prototype.do[NomeDoM etodo]

Passo-a-passo  Crio

um arquivo javascript: o UserExtensions.js;  Adiciono os métodos, seguindo o padrão: Selenium.prototype.do[NomeDoMeto do], conforme explicações anteriores;  Adiciono no Selenium IDE, conforma imagem seguinte

Selenium.prototype.do[NomeDoM etodo]

Métodos e Objetos auxiliares

Para se trabalhar com o Selenium é necessário utilizar arquivos javascript, pois existem casos que o próprio Selenium não consegue automatizar sem o auxílio de javascript; Nesse contexto, é recomendado que se utilize uma escrita de código fora do padrão do Selenium; Dessa maneira, os métodos podem ser chamados sem a limitação de tamanho e os mesmos não possuem a necessidade de serem chamados na IDE do Selenium.

Como Sobrescrever métodos da API do Selenium IDE?
 Simples:

API do Selenium IDE está disponível:  http://code.google.com/p/selenium/sour ce/search?q=dotype&origq=dotype&btn G=Search+Trunk (svn selenium);  Basta no arquivo js UserExtensions.js colocar o método sobrescrevendo o da API;  O método a ser chamado é o seu!

Como Sobrescrever métodos da API do Selenium IDE?

                

/** * Método que sobrescreve o comando type do Selenium, executando somente * se o valor não for vazio ou nulo */ Selenium.prototype.doType = function(locator, value) {
if(value == '' || value == null) return ; if (this.browserbot.controlKeyDown || this.browserbot.altKeyDown || this.browserbot.metaKeyDown) { throw new SeleniumError("type not supported immediately after call to controlKeyDown() or altKeyDown() or metaKeyDown()"); } // TODO fail if it can't be typed into. var element = this.browserbot.findElement(locator); if (this.browserbot.shiftKeyDown) { value = new String(value).toUpperCase(); } this.browserbot.replaceText(element, value);

Conclusão

Duvidas?

Autores
 André

Fernandes de Caldas  Lysianne Couto Andrade  Wellington Narciso

Referências


 

http://seleniumhq.org/ http://en.wikipedia.org/wiki/Selenium_(softwa re) http://wiki.openqa.org/display/SIDE/Home http://svn.openqa.org/fisheye/browse/~raw,r =2184/selenium/website/src/main/webapp/in stalling.html http://stackoverflow.com/questions/3380682/ what-exactly-is-selenese-html

Referências
   

http://release.seleniumhq.org/seleniumcore/1.0.1/reference.html http://wiki.openqa.org/display/SEL/Contribute d+User-Extensions http://colab.mpdl.mpg.de/mediawiki/images /1/16/Pubman_and_Selenium_tests.ppt http://bharathmarrivada.blogspot.com.br/2011/02/selenium 10-vs-selenium20.html

Sign up to vote on this title
UsefulNot useful