4. O que é o Selenium?
Suítede ferramentas de teste para
sistemas web
Diferentes Abordagens de Automação
de Testes
Suporta Vários Browsers e S.Os
5. O que é o Selenium?
Open Source
Muito Flexível
Simula o comportamento do Usuário.
7. Framework Selenium
A Suite Selenium é composta de:
Selenium Core:
Selenium IDE:
Selenium RC:
Selenium Grid:
Selenium WebDriver(Novo):
8. 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.
Usauma linguagem de comando
chamada Selenese (será explicado
depois)
9. 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
10. 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
12. 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
13. 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
14.
15. 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)
16. 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.
17.
18. Selenium WebDriver
Mais nova ferramenta da Suite Selenium
Integração com a API WebDriver
Selenium 2.0!
2.0?
20. 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)
21. 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
22. Selenium WebDriver
Selenium2.0 supera as dificuldades da
versao anterior, tendo controle do
Browser
WebDriver unido ao Selenium ganha:
Testes em Paralelo (Selenium Grid)
Multiplicidade de Browsers
24. 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
25. 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
26. 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
28. 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”.
29. 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.
30. 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.
31. 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.
32. 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" />
33. 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
34. 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”.
35. 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.
36. 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.
37. 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.
38. 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.
40. 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]
41. 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.
42. 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;
}
43. 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.
44. 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
46. 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.
47. 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!
48. 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);