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

98796699 selenium-framework

  • 1.
  • 2.
    Menú  Definição  Framework Selenium  Selenese  Referência do Selenium  Expandindo Selenium  Conclusão  Duvidas?  Autores  Referências
  • 3.
  • 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.
  • 6.
  • 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
  • 11.
  • 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
  • 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.
  • 18.
    Selenium WebDriver  Mais nova ferramenta da Suite Selenium  Integração com a API WebDriver  Selenium 2.0!  2.0?
  • 19.
  • 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.0supera as dificuldades da versao anterior, tendo controle do Browser  WebDriver unido ao Selenium ganha:  Testes em Paralelo (Selenium Grid)  Multiplicidade de Browsers
  • 23.
  • 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 evalores 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
  • 27.
  • 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 eDicas  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.
  • 39.
  • 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
  • 45.
  • 46.
    Métodos e Objetosauxiliares  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étodosda 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étodosda 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);
  • 49.
  • 50.
  • 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