Blog > Automação de Testes - Parte III - Selenium IDE - User Extensions

16/nov

O Selenium IDE permite que novos comandos, validações e formas de reconhecimento de objetos sejam criados pelos automatizadores. Este post trata do passo a passo para criar estes ítens. "Então quer dizer que eu vou poder criar novos comandos para utilizar no Selenium IDE???". Exatamente!!

Dons e donas,

      Continuando nosso papo sobre automação de testes e Selenium IDE, veremos hoje como criar novos comandos para o Selenium IDE. "Então quer dizer que eu vou poder criar novos comandos para utilizar no Selenium IDE???". Exatamente! Não sei vocês, mas quando eu soube isso me empolguei bastante! E gastei muito tempo criando comandos inúteis, hehehe. Sugiro que a criação de novos comandos seja realizada apenas em momentos que isso seja indispensável. Se você está criando muitos comandos para usar com o Selenium IDE será que não é hora de começar a utilizar o Selenium WebDriver? #ficaadica

      O Elias Nogueira publicou um post bem legal sobre o WebDriver que você pode ler aqui .

Caso ainda não tenham lido os posts anteriores dessa série, sugiro fortemente a leitura. Links abaixo.

Parte I - Introdução: Neste post eu escrevo sobre alguns pontos que devem ser levados em consideração antes de iniciar a automação.

Parte II - Principais dificuldades com Selenium IDE: Nesse post eu exemplifico algumas das principais dificuldades enfrentadas por quem está começando a automatizar com o Selenium IDE.

Vamos direto ao ponto. Siga os seguintes passos para preparar seu ambiente para a criação de comandos.

  1. Crie um arquivo em branco (pelo bloco de notas mesmo) e salve com o nome "user-extensions.js"
  2. No Selenium IDE, acesse o menu "Opções>Opções" e configure conforme imagem abaixo.

      Pronto!


CRIANDO UM COMANDO

      Vamos criar o comando "digitaCPFValido" que vai gerar um CPF aleatório válido e preencher determinado campo. Para isso, adicione o código javascript abaixo no arquivo "user-extensions.js" e em seguida clique no ícone  do Selenium IDE.

Código:


Selenium.prototype.doDigitaCPFValido = function(localizador, comPontuacao){

    var n1,n2,n3,n4,n5,n6,n7,n8,n9,d1,d2 = 0;

    var elemento = this.page().findElement(localizador);

    n1 = Math.round(Math.random() * 9);

    n2 = Math.round(Math.random() * 9);

    n3 = Math.round(Math.random() * 9);

    n4 = Math.round(Math.random() * 9);

    n5 = Math.round(Math.random() * 9);

    n6 = Math.round(Math.random() * 9);

    n7 = Math.round(Math.random() * 9);

    n8 = Math.round(Math.random() * 9);

    n9 = Math.round(Math.random() * 9);

    d1 = n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;

    d1 = Math.round(d1 - (Math.floor(d1/11)*11));

    d1 = 11 - d1;

    if (d1>=10) d1 = 0;

    d2 = d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;

    d2 = Math.round(d2 - (Math.floor(d2/11)*11));

    d2 = 11 - d2;

    if (d2>=10) d2 = 0;

    var cpf='erro';

    if (comPontuacao=='true'){

        cpf = ''+n1+n2+n3+'.'+n4+n5+n6+'.'+n7+n8+n9+'-'+d1+d2;

    } else {

        cpf = ''+n1+n2+n3+n4+n5+n6+n7+n8+n9+d1+d2;

    }

    this.page().replaceText(elemento, cpf);

}


Vamos as observações:

  1. Todo comando de ação deve, obrigatoriamente, começar com "Selenium.prototype.do", conforme visto na linha 1 do código acima;
  2. Qualquer função criada pode receber, no máximo, 2 parâmetros. No caso do código acima, uso os parâmetros "localizador" e "comPontuacao". O campo "comPontuacao" é opcional, ou seja, caso ele não seja informado o código vai considerar que eu quero um CPF sem pontuação. Caso eu coloque o valor "true" o código vai fornecer um CPF com pontuação;
  3. O Selenium IDE criará o comando "digitaCPFValido" e também o comando "digitaCPFValidoAndWait";
  4. A cada nova alteração que você fizer no arquivo "user-extensions.js" será preciso clicar no ícone  no Selenium IDE para que o arquivo seja recarregado.

Para testar o script no Selenium IDE, basta usar o comando conforme exemplo abaixo.


CRIANDO UMA VALIDAÇÃO

      Veremos agora como criar o comando de verificação "assertCPFValido", que vai verificar se o valor de determinado campo é um CPF válido. Para isso, adicione o código javascript abaixo no arquivo "user-extensions.js" e em seguida clique no ícone  no Selenium IDE.

Código:


Selenium.prototype.assertCPFValido = function(localizador) {

    var soma=0;

    var resto=0;

    var elemento = this.page().findElement(localizador);

    var cpf = ""+elemento.value;

    var resultado = true;

    cpf = cpf.replace(".","");

    cpf = cpf.replace(".","");

    cpf = cpf.replace("-","");

    if (cpf.length<11) resultado = false;

    if (isNaN(cpf)) resultado = false;

    if (cpf == "00000000000") resultado = false;

    for (i=1; i<=9; i++) {

        soma = soma + parseInt(cpf.substring(i-1, i)) * (11 - i);

    }

    resto = (soma * 10) % 11;

    if ((resto == 10) || (resto == 11)) resto = 0;

    if (resto != parseInt(cpf.substring(9, 10)) ) resultado = false;

    soma = 0;

    for (i = 1; i <= 10; i++) {

        soma = soma + parseInt(cpf.substring(i-1, i)) * (12 - i);

    }

    resto = (soma * 10) % 11;

    if ((resto == 10) || (resto == 11)) resto = 0;

    if (resto != parseInt(cpf.substring(10, 11))) resultado = false;

    Assert.matches("true",""+resultado);

}


Vamos as observações:

  1. Todo comando de verificação deve, obrigatoriamente, começar com "Selenium.prototype.assert", conforme visto na linha 1 do código acima;
  2. A função criada pode receber, no máximo, 2 parâmetros. No caso do código acima eu uso apenas o parâmetro "localizador";
  3. O Selenium IDE criará o comando "assertCPFValido" e também o comando "verifyCPFValido";
  4. A cada nova alteração que você fizer no arquivo "user-extensions.js" será preciso clicar no ícone  no Selenium IDE para que o arquivo seja recarregado.

Para testar o script no Selenium IDE, basta usar o comando conforme exemplo abaixo.


CRIANDO UMA FORMA DE LOCALIZAÇÃO

      Veremos agora como criar uma nova forma de localização de elementos chamada "textoBotao", que vai localizar um botão pelo texto que é apresentado. Para isso, adicione o código javascript abaixo no arquivo "user-extensions.js" e em seguida clique no ícone  no Selenium IDE.

Código:


PageBot.prototype.locateElementByTextoBotao = function(texto, documento) {

    var botoes = documento.getElementsByTagName("button");

    var botao;

    for (var i = 0; i < botoes.length; i++) {

        botao = botoes[i];

        if (botao.innerHTML == texto) {

            return botao;

        }

    }

    return null;

};


Vamos as observações:

  1. Todo comando de localização de elementos deve, obrigatoriamente, começar com "PageBot.prototype.locateElementBy", conforme visto na linha 1 do código acima;
  2. A função criada deve receber, obrigatoriamente, 2 parâmetros, onde o primeiro parametro é o texto informado na localização, e o segundo parâmetro é o contexto onde o elemento será buscado;
  3. O Selenium IDE criará a forma de reconhecimento "textoBotao" que pode ser usada da seguinte forma, sempre que for solicitado o locator em qualquer comando (comando click por exemplo). Ex.: "textoBotao=buscar" irá tentar localizar um elemento "button" que possua o texto "buscar".
  4. A cada nova alteração que você fizer no arquivo "user-extensions.js" será preciso clicar no ícone  no Selenium IDE para que o arquivo seja recarregado.

Para testar o script no Selenium IDE, basta usar o comando conforme exemplo abaixo.


      Por hoje é só galera! Continuaremos esta série escrevendo um pouco mais sobre Selenium IDE, mas caso você tenha alguma dúvida, sugestão ou queira apenas trocar idéia sobre temas relacionados a automação de testes sinta-se a vontade para me mandar e-mails. Meus dados de contato estão no início deste post, juntamente com o mini curriculo.

Até o próximo post!

POSTS RELACIONADOS

Webinar gratuito de Selenium IDE - Online

Aprenda tudo sobre o Selenium IDE neste Webinar

AGENDA

CURSOS RELACIONADOS