Post

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...

By eliasnogueira
Selenium IDE com Data Driven? Sim, isto agora é possível!
Observações iniciaisEu sempre tive uma postura de um profisisonal, quando em aprendizado do Selenium, aprender o IDE a fins educativos e de primeiro passo da automação (record & play), de usar e propor aos profissionais e alunos que me procuram a usar o Selenium RC para fazer testes que exigem bem mais do que o IDE: loops, controles, parametrização de dados, etc…Mas desta vez resolvi postar sobre como fazer com que o Selenium IDE execute scrips Data DrivenATENÇÃO: Este post é uma alteração do post original da SauceLabs [1] que você pode acessar no link abaixo:http://saucelabs.com/blog/index.php/2011/01/selenium-resources-for-newbs-data-driven-testing-with-ide-xml/
Ainda mantenho fortemente a minha postura: usem o Selenium RC com qualquer linguagem para usar todo o poder que essa ferramenta pode te dar. Um dos principais motivos de escrever este post é de:

Eu gostar destas coisas novas e ficar brincando com os scripts
De ajudar os nossos amigos profissionais que ainda não sabem falar inglês e não poderiam entender o post origianl (e que devem levar um puxão de orelha por isso)
Para poder ajudar aqueles que estão aprendendo o Selenium IDE que, mesmo que este post te ajude, não vai poder fugir da programação para fazer coisas mais poderosas com a ferramenta

[1] Pra quem não sabe o criador da SouceLabs, que presta serviços de teste com Selenium nas nuvens, é um dos criadores do Selenium.
Ahh, e pra quem não sabe o que é Data Driven, é o “poder” de dar ao script a independência de dados através de parâmetros inseridos ao invés dos dados. Se você ainda não sabe o que é isso, Google!
O que você vai precisar!Basicamente de um plugin e duas “user-extensions” do para o Selenium IDE.Primeiro siga estes passos:

Instale o plugin de Flow Control. Necessita de reinicio do Firefox
Baixe a user-extension includeCommand4IDE na versão 1.1
Baixe a user-extension datadriven.js, que está na versão 0.2

Clique nos links de cada item para baixá-lo! Instalou o Flow Control e baixou as duas user-extensions? Faça o seguinte:

Descompacte os arquivos zip das respectivas user-extensions num diretório de sua escolha
Adicione as duas user-extensions no Selenium IDE via menu Options/Options… clicando no botão browser para o item Selenium Core extensions (user-extension.js) (vide Possíveis Erros #1)

Reinicie o Selenium IDE

Deu tudo certo? Maravilha!!! Vamos para os próximos passos!!!
Criar o arquivo XML de Massa de Dados!Sim, para que seja possível fazer com que o script Selenese (script HTML do Selenium) esteja preparado para o Data Driven é necessário criar um arquivo XML que vai conter os dados que tu vais utilizar!
Uma coisa muito importante é primeiro entender o arquivo XML!
Entendendo o arquivo XMLAbaixo está um exemplo do arquivo XML que estou usando:

A linha 1 possui a tag testdata. É ela que identifica que o arquivo XML é a tua massa de dados.
As linhas 2, 3 , 4 e 5 possuem a tag test. Cada tag test é um indício de massa de dados que tu vais utilizar no script. Dentro desta tag existem atributos. No exemplo acima os atributos são nome e sobrenome. Estes atributos serão os parâmetros do teu script do Selenium, que irão no formato ${nomeAtributo}.Neste caso eu tenho que colocar no meu script os parâmetros ${nome} e ${sobrenome} sem precisar cria-los anteriormente no script.
A linha 6 fecha a tag do testdata
Cada atributo tem um valor e é este valor que vai ser substituido pelo parâmetro no script. Lindo né?
Tu podes criar diversos test um para cada iteração do script que tu necessitar.Agora aconselho fortemente ler os itens #2, #3 e #4 do “Possiveis Erros”
Script!! (êeeeee)Agora veremos o script final sobre o exemplo e todos os comandos necessários para que ele funcione!

loadTestData
file:///C:/selenium_datadriven/massa_dados.xml

open
/arquivos_blog/selenium/datadriven/

while
!testdata.EOF()

nextTestData

type
nomePessoa
${nome}

type
sobrenomePessoa
${sobrenome}

clickAndWait
send

assertTextPresent
Olá, ${nome} ${sobrenome}

clickAndWait
link=Voltar

endWhile

Na linha 1 da tabela temos o comando que fará o carregamento da massa de dados com o comando loadTestData. Este comando é parte da user-extension datadriven.js.Você obrigatoriamente deve iniciar o valor deste comando com ‘file:///‘ (sem as aspas simples) seguido pelo caminho do arquivo XML (como no exemplo)
Na linha 2 da tabela temos o velho conhecido comando open para a minha página de exemplo deste post
Na linha 3 da tabela temos o comando while, da user-extension FlowControl, que é responsável de fazer um loop no script. O valor deste comando é !testData.EOF() que traduzindo quer dizer: “enquanto o testData não terminar, ou seja, existam as tags test, execute”. Ele que é responsável por controlar o número de execuções a partir das tags test existentes.
Na linha 4 da tabela existe o comando nextTestData que pertence a user-extension datadriven.js. É ela que validará que existam dados na massa de dados (arquivos XML para continuar executando o script)
Naz linhas 5, 6, 7, 8 e 9 existem os comandos básicos do Selenium para a interação com o exemplo. Aqui tu precisas prestar muita atenção: ao invés de manter os valores fixos no script eu os substitui pelos parâmetro ${nome} e ${sobrenome}, que são os nomes dos atributos da tag test do XML da massa de dados, ententeu? É só colocar o mesmo nome e, acredite, ele preencherá com o valor.
Na linha 10 da tabela há a finalização do loop pelo comando endWhile que pertence a user-extension FlowControl.
Agora é só correr para o abraço!!!Pronto, tudo está pronto para execução com sucesso!!!Tu podes baixar o este exemplo por este link e testar ai!
Se tu executares o exemplo que tu acabou de baixar, lembre-se de colocar na Base URL o endereço http://eliasnogueira.com
Agora vamos falar sobre o exemplo:
Exemplo utilizado!O exemplo é bem simples: consiste em um formulário de submissão de dados contendo o Nome e Sobrenome de uma pessoa. Após a submissão dos dados somos redirecionados para uma tela com a seguinte mensagem na página “Olá Fulano de Tal“, onde Fulano é o nome e de Tal é o sobrenome inserido!
A página do exemplo pode ser acessada no link abaixo:http://eliasnogueira.com/arquivos_blog/selenium/datadriven/index.php
Observação: cuidado para este item não te confundir, mas se tu for criar um script sobre uma página ajax ou não quer clicar em algum link de voltar, utilize o comando goBackAndWait antes do comando endWhile. Este comando fará com que o script emule o “voltar” do browser.
Possíveis Erros

Se você não colocar as extensões no lugar certo receberá a seguinte mensagem logo que abrir o Seleium IDE: “error loading Selenium IDE extensions: ReferenceError: Selenium is not defined”. Então garanta que você colocou no campo certo (olhe a imagem)
Elias, posso mudar o nome da tag testdata? Resposta: não!!! Sem esta tag o script não roda, é obrigatória!
Elias, posso mudar o nome da tag test? Resposta: não!!! Sem esta tag o script não roda, é obrigatória!
Elias, posso utilizar parâmetros diferentes entre os testes? Resposta: Sim! desde que os parâmetros obrigatórios estejam la. Se tu não entendeu, deixe todos iguais e o script vai rodar sem erros!

Problemas com Firefox 20Para quem atualizar o Firefox para a versão 20 e estiver usando este modelo de Data Driven no Selenium IDE o seguinte erro será apresentado sempre que o Selenium IDE for aberto:

Solução

Com o Selenium IDE fechado abra com um editor de texto o arquivo datadriven.js

Localize o seguinte trecho no arquivo:

Acima do trecho XML.serialize = function(node) { inclua o seguinte: var XML = {};

O trecho vai ficar como na imagem abaixo:

Abra o Selenium IDE e corra para o abraço!

Considerações com o Selenium RCSe tu fores portar o teu script do Selenium IDE para ser executado por linha de comando no Selenium RC tu vais previsar baixar a user-extension do Flow Control, isso porque pelos passos que eu coloquei aqui nós a instalamos via Addon do Firefox, e se tu tentar executar o teu script com somente as outras duas user-extensions (datadriven e includeCommand4IDE) ele não vai rodar por não conhecer o comando while.
Baixe o .js do FlowControl no site abaixo e adicione ele no parametro de execução no RC.http://51elliot.blogspot.com/2008/02/selenium-ide-goto.html
ATUALIZADO: para executar os scripts via linha de comando com o Seleium RC temos o seguinte problema: temos três arquivos .js que utilizamos no Seleniun IDE (flow control, includeCommnads e dataDriven) e no Selenium RC só podemos inserir um: o user-extension.js.Então como executar os scripts via linha de comando???
A resposta é: copie o conteudo de cada arquivo .js e cole crie um arquivo user-extension.js e cole com o conteudo de cada um. Quando você for fazer isso é necessário colar os arquivos na ordem que o Selenium IDE usa cada comando, que deve ser o seguinte:

Copie o conteudo do arquivo FlowControl.js e cole no arquivo user-extension.js

Copie o conteudo do arquivo includeCommand4IDE e cole no arquivo user-extension.js

Copie o conteudo do arquivo DataDriven e cole no arquivo user-extension.js

E qual a vantagem de executar os scripts Data Driven com o Selenium RC: executar em diferentes browsers!
A linha de comando para a execução via Selenium RC seria essa:java -jar selenium-server.jar -userExtension user-extensions.js -htmlSuite *iexplore “http://eliasnogueira.info” “C:pastasuite.html” “C:pastaresultado.html”
Atenção para alterar as seguinte as seguintes informações para o local do suite e resultados que tu necessita:

C:pastasuite.html
C:pastaresultado.html

Não esqueça que você tem que estar no diretório do Selenium Server para executar a linha de comando!
Abraço a todos vocês e bom divertimento!!!

Source: http://eliasnogueira.com/data-driven-com-selenium-ide-sim-e-possivel/

Category: automacao, selenium

Você também pode querer ler

Comments are off for this post.