Download - Selenium Framework
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
Diferentes Abordagens de Automação de Testes
Suporta Vários Browsers e S.Os
O que é o Selenium? Open Source
Muito 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
Está por baixo de toda funcionalidade do Selenium RC e IDE.
Usa uma linguagem de comando chamada Selenese (será explicado depois)
Selenium IDE IDE Completa.
Extensão do Firefox.
Grava, Edita e Reproduz as interações feitas no browser.
Não Necessita conhecer nenhuma Linguagem de Programação
Selenium IDE Scripts gravados em formato selenese
automaticamente
Gera código para varias linguagens e frameworks de testes
Bom para aprender sobre a API do Selenium
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 em Java
Testes 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
Cluster: Servidor Hub distribui o teste para várias maquinas rodando Selenium RC
Nuvem: Testes podem ser rodados em servidores nas Nuvens.
Selenium WebDriver Mais nova ferramenta da Suite Selenium
Integração com a API WebDriver
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
WebDriver unido ao Selenium ganha: Testes em Paralelo (Selenium Grid) Multiplicidade de Browsers
Selenese
Selenese Linguagem de comandos para elaboração
de Scripts de Teste dentro de tabelas HTML
Está Presente no Selenium Core, que é incluído pelo Selenium IDE e RC
Cada comando representa uma linha desta tabela, fazendo referencia a uma função da biblioteca do Selenium Core
Selenese Apresenta o formato de tabela abaixo:
Comando 1 Alvo 1 Valor 1
Comando 2 Alvo 2 Valor 2
Comando n Alvo n Valor n
Selenese Alvos e valores são parametros a serem
usados em alguma função do Core
Exemplo de Caso de Teste com SeleneseMyTest
open /mypage
type nameField John Smith
click submitButton True
verifyText name John Smith
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:
Pára a execução quando ocorre um erro; Mais utilizado para verificar se está na página
correta Verify:
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 = bolaProcura 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[NomeDoMetodo]• 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[NomeDoMetodo] * 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[NomeDoMetodo]
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[NomeDoMetodo]
Passo-a-passo
Crio um arquivo javascript: o UserExtensions.js;
Adiciono os métodos, seguindo o padrão: Selenium.prototype.do[NomeDoMetodo], conforme explicações anteriores;
Adiciono no Selenium IDE, conforma imagem seguinte
Selenium.prototype.do[NomeDoMetodo]
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/source/search?q=dotype&origq=dotype&btnG=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_(s
oftware)
http://wiki.openqa.org/display/SIDE/Home
http://svn.openqa.org/fisheye/browse/~raw,r=2184/selenium/website/src/main/webapp/installing.html
http://stackoverflow.com/questions/3380682/what-exactly-is-selenese-html
Referências http://release.seleniumhq.org/selenium-
core/1.0.1/reference.html http://wiki.openqa.org/display/SEL/Contr
ibuted+User-Extensions http://
colab.mpdl.mpg.de/mediawiki/images/1/16/Pubman_and_Selenium_tests.ppt
http://bharath-marrivada.blogspot.com.br/2011/02/selenium10-vs-selenium20.html