98796699 selenium-framework
TRANSCRIPT
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 Selenese
MyTest
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 = 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[NomeDoMetodo], 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/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_(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/selenium-
core/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://bharath-
marrivada.blogspot.com.br/2011/02/selenium
10-vs-selenium20.html