Introdução ao Selenium 2

Selenium é uma ferramenta de apoio às necessidades de testes em aplicações web. Altamente flexível, permite muitas opções para a localização de elementos de interface no navegador e simular comportamentos reais de um usuário. A versão 2.0 tem como funcionalidade primária a integração da API WebDriver. Projetado para fornecer uma interface ainda mais simples, concisa e orientada a

Selenium é uma ferramenta de apoio às necessidades de testes em aplicações web. Altamente flexível, permite muitas opções para a localização de elementos de interface no navegador e simular comportamentos reais de um usuário. A versão 2.0 tem como funcionalidade primária a integração da API WebDriver. Projetado para fornecer uma interface ainda mais simples, concisa e orientada a objeto, o que melhora de forma significativa o suporte aos problemas complexos que são enfrentados ao testar uma aplicação web.

Essa API pode ser chamada através de diversas linguagem de programação, porém, em nosso exemplo, iremos utilizar o NodeJS (JavaScript), que pode ser baixado no site oficial e que possui um gerenciador de pacotes (Node Package Manager – NPM), o qual permite a interação com um repositório online via linha de comando, facilitando a instalação de várias outras ferramentas.

Nesse exemplo, será utilizado uma ferramenta chamada Vows, gerenciada e instalada pelo NPM, que ajuda no desenvolvimento orientado a comportamento assíncrono. Usar testes assíncronos no NodeJS tem dois motivos. Primeiro (e talvez óbvio), é que o NodeJS é assíncrono e por isso os testes também deveriam ser. Segundo, é fazer com que os testes, os quais lidam com entrada e saída de dados, rodem mais rápido.

Breve resumo dos conceitos do Vows. Suite: um objeto que contêm um ou mais batches, e pode ser executado ou exportado. Batch: uma estrutura de contextos. Context: um objeto que pode conter um topic(opcional), nenhum ou mais vows, nenhum ou mais sub-contextsTopic: pode ser tanto um valor ou uma função de código assíncrono. Vow: é uma função que recebe o topic como um argumento e roda assertivas no topic.

O teste que será feito possui quatro passos: (i) abrir o navegador, (ii) acessar uma página de teste(iii) verificar o título da página e (iv) fechar o navegador. Algo bem simples. Suficiente para experimentar a versão 2.0 do Selenium.

As dependências necessárias podem ser instaladas usando o NPM, digitando o seguinte script no terminal:

Há duas maneiras de instalar dependências no NodeJS: globalmente ou localmente. Quando uma dependência é global, os arquivos são executáveis, tornando possível a utilização de uma dependência através da linha de comando. Quanto às dependências locais, estas são instaladas no diretório corrente, dentro de um diretório chamado node_modules.

O primeiro script, utilizando o parâmetro -g, instala duas dependências globais: phantomjs e vows.PhantomsJS é um headless WebKit, feito totalmente em javascript e possui suporte rápido e nativo para vários padrões web como manipulação de DOM, seletores CSS, JSON, Canvas e SVG.

Já o segundo script, instala três dependências locais: chai, wd e vows. Chai é uma biblioteca de assertivas BDD/TDD para NodeJS e navegadores, a qual pode ser ‘graciosamente’ utilizada com qualquer framework de teste JS. WD é um cliente em NodeJS para facilitar o acesso à API do Selenium 2, a qual suporta métodos como: fazer requisições GET e POST, clicar no botão VOLTAR do navegador, fazer refresh no navegador, pegar um printscreen da tela corrente, redimensionar e mover a janela do navegador, submeter formulário, digitar texto, usar cookies, selecionar um elemento DOM, clicar e mover um elemento DOM selecionado, etc.

Após a instalação de todas as dependências necessárias, vamos criar dois arquivos: configuracao-webdriver-usando-phantom.js com as informações de configurações do webdriver e apenas-um-exemplo.js com os passos-a-passos simulando o comportamento real de um usuário.

configuracao-webdriver-usando-phantom.js

apenas-um-exemplo.js

Criado esses dois arquivos, é preciso, em um outro terminal, rodar o PhantomJS em modo WebDriver, digitando o seguinte comando:

Uma vez o PhantomJS rodando em segundo plano, basta rodar o vows, o parâmetro –spec serve apenas para ter um diferente tipo de ‘reporter’, segue o comando e uma ilustração do resultado obtido:

Esse exemplo contempla de forma bem simples a utilização da API do WebDriver/Selenium 2. Essa abordagem também pode ser feita em diferentes tipos de navegadores. Como é sempre melhor começarmos aos poucos, aplicando pequenos passos de cada vez, isso ficará para uma próxima discussão. Para quem se interessar, todo código está disponível em um gist. Muito obrigado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *