SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
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ítede 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.

 Usauma 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
 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
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[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/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

Mais conteúdo relacionado

Mais procurados

Teste de aplicações web com selenium
Teste de aplicações web com seleniumTeste de aplicações web com selenium
Teste de aplicações web com seleniumMayron Cachina
 
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driverJúlio de Lima
 
Testando aplicações Flex com Selenium
Testando aplicações Flex com SeleniumTestando aplicações Flex com Selenium
Testando aplicações Flex com SeleniumVictor Serta
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e SeleniumAndré Thiago
 
Automação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumAutomação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumIsrael Santiago
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de SeleniumAutotic
 
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e WebdriverJúlio de Lima
 
Curso treinamento automação de testes com selenium
Curso treinamento automação de testes com seleniumCurso treinamento automação de testes com selenium
Curso treinamento automação de testes com seleniumCristiano Caetano
 
Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?Alex Tercete
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkMayara Fernandes
 
Selenium Workshop
Selenium WorkshopSelenium Workshop
Selenium Workshopcathoderay
 
Como testar aplicativos ios e android
Como testar aplicativos ios e androidComo testar aplicativos ios e android
Como testar aplicativos ios e androidQualister
 
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidadeWordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidadeWordCamp Floripa
 
Testes para dispositivos móveis
Testes para dispositivos móveisTestes para dispositivos móveis
Testes para dispositivos móveisQualister
 
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com CodeceptionQualister
 

Mais procurados (20)

Teste de aplicações web com selenium
Teste de aplicações web com seleniumTeste de aplicações web com selenium
Teste de aplicações web com selenium
 
Selenium ide apresentação
Selenium ide   apresentaçãoSelenium ide   apresentação
Selenium ide apresentação
 
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
 
Testando aplicações Flex com Selenium
Testando aplicações Flex com SeleniumTestando aplicações Flex com Selenium
Testando aplicações Flex com Selenium
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
 
Selenium
SeleniumSelenium
Selenium
 
Automação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumAutomação de Teste Funcionais - Selenium
Automação de Teste Funcionais - Selenium
 
Selenium
SeleniumSelenium
Selenium
 
Selenium ide
Selenium ideSelenium ide
Selenium ide
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
 
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
 
Selenium IDE
Selenium IDESelenium IDE
Selenium IDE
 
Curso treinamento automação de testes com selenium
Curso treinamento automação de testes com seleniumCurso treinamento automação de testes com selenium
Curso treinamento automação de testes com selenium
 
Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot framework
 
Selenium Workshop
Selenium WorkshopSelenium Workshop
Selenium Workshop
 
Como testar aplicativos ios e android
Como testar aplicativos ios e androidComo testar aplicativos ios e android
Como testar aplicativos ios e android
 
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidadeWordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
WordCamp Floripa 2021 - Fernando Nilson - Análise de vulnerabilidade
 
Testes para dispositivos móveis
Testes para dispositivos móveisTestes para dispositivos móveis
Testes para dispositivos móveis
 
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
 

Semelhante a 98796699 selenium-framework

Ruby para testers III - Selenium
Ruby para testers III - SeleniumRuby para testers III - Selenium
Ruby para testers III - SeleniumTestRock!
 
Introdução À Automação de Testes com Selenium
Introdução À Automação de Testes com SeleniumIntrodução À Automação de Testes com Selenium
Introdução À Automação de Testes com Seleniumrodrigogouveia
 
Configurando o connector salesforce
Configurando o connector salesforceConfigurando o connector salesforce
Configurando o connector salesforceGuilherme Baccas
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium Mayron Cachina
 
Tutorial de Uso do R Selenium
Tutorial de Uso do R Selenium Tutorial de Uso do R Selenium
Tutorial de Uso do R Selenium Daniel Marcelino
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de testeMarcos Pessoa
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2Felipe Pimentel
 
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Elvis Rocha
 
Apostila_JavaScript_pela_axademia_ardkgfv
Apostila_JavaScript_pela_axademia_ardkgfvApostila_JavaScript_pela_axademia_ardkgfv
Apostila_JavaScript_pela_axademia_ardkgfverickrodrigo23
 
Qualidade de Código
Qualidade de CódigoQualidade de Código
Qualidade de CódigoJoberto Diniz
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppetDaniel Sobral
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 

Semelhante a 98796699 selenium-framework (20)

Ruby para testers III - Selenium
Ruby para testers III - SeleniumRuby para testers III - Selenium
Ruby para testers III - Selenium
 
Introdução À Automação de Testes com Selenium
Introdução À Automação de Testes com SeleniumIntrodução À Automação de Testes com Selenium
Introdução À Automação de Testes com Selenium
 
Persistência JPA
Persistência JPAPersistência JPA
Persistência JPA
 
cypress.pdf
cypress.pdfcypress.pdf
cypress.pdf
 
JADE+JENA
JADE+JENAJADE+JENA
JADE+JENA
 
Configurando o connector salesforce
Configurando o connector salesforceConfigurando o connector salesforce
Configurando o connector salesforce
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium
 
Tutorial de Uso do R Selenium
Tutorial de Uso do R Selenium Tutorial de Uso do R Selenium
Tutorial de Uso do R Selenium
 
Aplicações web parte 2
Aplicações web parte 2Aplicações web parte 2
Aplicações web parte 2
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de teste
 
Palestra
PalestraPalestra
Palestra
 
Estrutura do Projeto
Estrutura do ProjetoEstrutura do Projeto
Estrutura do Projeto
 
Estrutura do Projeto
Estrutura do ProjetoEstrutura do Projeto
Estrutura do Projeto
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2
 
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
 
Apostila_JavaScript_pela_axademia_ardkgfv
Apostila_JavaScript_pela_axademia_ardkgfvApostila_JavaScript_pela_axademia_ardkgfv
Apostila_JavaScript_pela_axademia_ardkgfv
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Qualidade de Código
Qualidade de CódigoQualidade de Código
Qualidade de Código
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppet
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 

98796699 selenium-framework

  • 2. Menú  Definição  Framework Selenium  Selenese  Referência do Selenium  Expandindo Selenium  Conclusão  Duvidas?  Autores  Referências
  • 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);
  • 51. Autores  André Fernandes de Caldas  Lysianne Couto Andrade  Wellington Narciso
  • 52. 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
  • 53. 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