Blog > Introdução ao Selenium

19/jan

Neste post iremos aprender e entender quais ferramentas compõe o Selenium, o que elas fazem e todo o ecosistema por trás de uma das ferramentas/frameworks mais utilizados para automação de teste funcional web.

O que é o Selenium

Selenium é uma ferramenta de automação de browsers web, ou seja, podemos criar tarefas repetitivas em uma página web utilizando Selenium.
Ao contrários do que muitos pensam, Selenium não é uma única ferramenta e sim uma suíte/conjunto de ferramentas.
Com ele podemos, além de automatizar página web em diferentes browsers, executar a automação em diversas plataformas.
A lista de suporte de Sistemas Operacionais, Browser e linguagens de programação é bem ampla e está descrita no final deste post.

Projetos

Selenium IDE

É um plugin para o Firefox que permite a gravação execução (record and replay) de testes a partir do Firefox 2+. Você também pode gerar código para outras linguagens de programação (veja a tabela no final do post).

Além da gravação ele permite a edição e debug dos testes e possui o Selenium Core. Algumas das funcionalidades do Selenium são:

  • Fácil gravação, alteração e execução dos scripts de teste
  • Fácil localização de elementos HTML através de Ids, Nomes, CSS ou XPath
  • Auto completar comandos
  • Debug e breakpoints
  • Salvar testes em HTML (formato padrão do Selenium IDE), ou nas linguagens que ele suporta
  • Customização por plugins

O Selenium IDE também suporta uma série de plugins que estendem o poder da gravação e execução. Entre os plugins* mais utilizados estão:

  • Screenshot on Fail: Automaticamente captura uma screenshot no momento que um comando falha
  • Implict Wait: Espera automaticamente por um elemento que ainda não esteja presente
  • Stored Variables Viewer: Permite a visualização de variáveis durante e após a execução de um script
  • Flow Control: Permite a criação de quebra de fluxo (goto) e loops no script

Geralmente o Selenium IDE é o ponto de partida para quem quer começar a aprender Selenium sem conhecimentos em programação. É uma poderosa ferramenta para executar testes, mas não nos dá tanta liberdade como o Webdriver (que veremos asseguir).

* todos os plugins podem ser acessados pela página de downloads do Selenium http://docs.seleniumhq.org/download/

Selenium Remote Control

O Selenium Remote Control é um cliente/servidor que controla um browser local ou em outro computador utilizando scripts do Selenium IDE (html) ou scripts criados em diferentes linguagens de programação.

Ele é dividido em duas partes:

  • Um servidor que, automaticamente, abre e fecha um browser web e age como um proxy HTTP para as requisições web dos scripts do Selenium
  • Bibliotecas para as linguagens de programação suportadas pelo Selenium

Quando queremos executar os scripts do Selenium IDE fora do Firefox utilizaremos o Selenium Remote Control através de linha de comando para executar suítes de teste em qualquer computador. Esse método pode ser utilizado em ambientes de Integração Contínua.

Em utilização com o Webdriver (que veremos abaixo), ele possibilita a execução dos browser via linguagem de programação. Não há como utilizar o Webdriver sem utilizar a biblioteca do Selenium Remote Control junto.

WebDriver

Hoje em dia tão polular como o Selenium IDE o Webdriver é uma API que, nativamente, executa ações nos browser suportados independente de versão e pode ser utilizado tanto localmente como remotamente.

É a junção hoje do Selenium 1 + Webdriver.

O Webdriver foi inicialmente criado dentro do Google como uma melhoria ao Selenium 1.0. Depois de um tempo a equipe do Selenium incorporou o Webdriver e manteve o mesmo nome desta API, que também é conhecida como Selenium 2.0

Ela nada mais é do que um conjunto de bibliotecas (bindings) para as linguagens de programação suportadas. Hoje em dia ela é amplamente utilizada por nos dar liberdade no momento da criação e alteração do script, pois podemos utilizar a linguagem de programação preferida e utilizamos de todo o poder dela (como criação de classes, loops, manipulação de erros, etc...).

Possui nativamente suporte aos principais browser de mercado, como:

  • Android (web)
  • iPhone (web)
  • Firefox
  • HTMLUnit
  • Opera
  • Safari

Outros browsers como o Internet Explorer e Google Chrome precisam de um interpretador (a utilização de um arquivo executável) para que os comandos enviados pelo Webdriver possam ser entendidos por estes browsers.

Selenium Grid

Ele é um extensão que permite:

  • A execução de testes remotos e de testes distribuídos/paralelos
  • Gerenciar múltiplos ambientes de um único ponto para que possamos executar testes em diferentes configurações de browsers e sistemas operacionais

Com ele podemos executar testes em outras máquinas em diferentes browsers disparando os testes de qualquer outra máquina. Ex: os testes serão disparados de uma máquina com Ubuntu, e a aplicação irá testes em um browser Internet Explorer num Windows 7.

Para que isso seja possível é necessário iniciar o Selenium Remote Control com alguns parâmetros adicionais na máquina de origem e destino, criando um hub na máquina de origem (que dispara as execuções, gerencia quais browsers estão disponíveis em cada sistema operacional e recebe os resultados dos testes) e um nós na máquina de destino (que será utilizada para a execução do teste).

Além disso precisamos instanciar (utilizar) um driver chamado RemoteWebDriver especificando qual a combinação de browser e/ou sistema operacional que necessitamos.

Isso nos reduz custos de infraestrutura, uma vez que podemos utilizar máquinas virtuais para a execução dos testes, e reduzir o tempo de execução de teste se executarmos de forma distribuída/paralela.

Resumo

Neste post aprendemos o que é o Selenium e o conjunto de ferramentas que o compõe. Nos próximos posts aprenderemos como utilizar cada uma destas ferramentas.

Adicional – Suporte à Browser, SO e Linguagens de Programação

Browsers

Browser Selenium IDE Selenium Remote Control Selenium Core Selenium 2/Webdriver API
Firefox 10 Gravar e executar testes Iniciar o browser e executar testes Executar testes Executar testes
Firefox 9 Gravar e executar testes Iniciar o browser e executar testes Executar testes Executar testes
Firefox 8 Gravar e executar testes Iniciar o browser e executar testes Executar testes Executar testes
Firefox 7 Gravar e executar testes Iniciar o browser e executar testes Executar testes Executar testes
Firefox 6 Gravar e executar testes Iniciar o browser e executar testes Executar testes Executar testes
Firefox 5 Gravar e executar testes Iniciar o browser e executar testes Executar testes Executar testes
Firefox 4 Gravar e executar testes Iniciar o browser e executar testes Executar testes Executar testes
Firefox 3.6 Gravar e executar testes Iniciar o browser e executar testes Executar testes Executar testes
Firefox 3 Gravar e executar testes Iniciar o browser e executar testes Executar testes Não suportado
IE 9 Não suportado Iniciar o browser e executar testes Executar testes Executar testes
IE 8 Não suportado Iniciar o browser e executar testes Executar testes Executar testes
IE 7 Não suportado Iniciar o browser e executar testes Executar testes Executar testes
Safari 3 Não suportado Iniciar o browser e executar testes Executar testes Não suportado
Safari 2 Não suportado Iniciar o browser e executar testes Executar testes Não suportado
Opera 9 Não suportado Iniciar o browser e executar testes Executar testes Executar testes
Opera 8 Não suportado Iniciar o browser e executar testes Executar testes Executar testes
Chrome Não suportado Executar testes *** Executar testes *** Executar testes ***
Others Não suportado Suporte parcial* Executar testes ** Não suportado

* Selenium Remote Control server pode iniciar qualquer executável, mas dependendo da configuração de segurança do browser, pode haver limitações técnicas que podem limitar certas funcionalidades.

** Selenium Core é escrito em Javascript e deve trabalhar (em teoria) nos browser com suporta a Javascript. Algumas operações são permitidas apenas via Selenium Remote Control por configurações de segurança do browser.

*** Chrome é suportado em colaboração do time do Chromium Visite este site para maiores informações sobre o Chromedriver.

Sistemas Operacionais

OS Selenium IDE Selenium Remote Control Selenium Core Selenium 2/Webdriver API
Windows Funciona no Firefox 2+ Iniciar browser, executar testes Executar testes Executar testes
OS X Funciona no Firefox 2+ Iniciar browser, executar testes Executar testes Executar testes
Linux Funciona no Firefox 2+ Iniciar browser, executar testes Executar testes Executar testes
Solaris Funciona no Firefox 2+ Iniciar browser, executar testes Executar testes Executar testes
Others Deve funcionar no Firefox 2+ Iniciar browser, executar testes * Executar testes ** Executar testes

* Selenium Remote Control server é escrito em Java, logo deve executar em outros sistemas operacionais desde que exista suporte a browsers web.

** Selenium Core é escrito em Javascript e deve trabalhar (em teoria) nos browser com suporta a Javascript. Algumas operações são permitidas apenas via Selenium Remote Control por configurações de segurança do browser.

Linguagens de Programação

As linguagens de programação são suportadas através de driver no Selenium Remote Control. Estas bibliotecas, criadas para cada linguagem, expõem comandos da API do Selenium nativamente através de métodos/funções.

Liguagem Selenium IDE Selenium Remote Control Selenium Core Selenium 2/Webdriver API
C# Gera código Suporte via biblioteca (driver) n/a Suporte via biblioteca (driver)
Java Gera código Suporte via biblioteca (driver) n/a Suporte via biblioteca (driver)
Perl Gera código Suporte via biblioteca (driver) n/a Não suportado**
PHP Gera código Suporte via biblioteca (driver) n/a Não suportado **
Python Gera código Suporte via biblioteca (driver) n/a Suporte via biblioteca (driver)
Ruby Gera código Suporte via biblioteca (driver) n/a Suporte via biblioteca (driver)
Others Gera código customizado* Comandos via HTTP requests** n/a Não suportado

* Você pode criar um gerador de código customizado para qualquer linguagem. O template é escrito em Javascript, mas eles apenas apresentam o texto em tela.

** Qualquer linguagem que pode fazer chamadas HTTP é capaz de executar os comandos do Selneium Remote Control server. As linguagens listadas aqui possuem biliotecas prontas para estas chamadas.

Frameworks de Teste

Framework Selenium IDE Selenium Remote Control Selenium Core
Bromine Pode-se adicionar um template no Selenium IDE Manipula browser, valida asserções via driver customizado

Manipula browser, valida asserções via driver customizado

Suporte especial**
JUnit Gera código Manipula browser, valida asserções via driver Java n/a
NUnit Gera código Manipula browser, valida asserções via driver .NET n/a
RSpec (Ruby) Gera código customizado via template * Manipula browser, valida asserções via driver Ruby n/a
Test::Unit (Ruby) Gera código Manipula browser, valida asserções via driver Ruby n/a
TestNG (Java) Gera código customizado via template * Manipula browser, valida asserções via driver Java n/a
unittest (Python) Gera código Manipula browser, valida asserções via driver Python n/a
Others Gera código customizado via template * Manipula browser, valida asserções via driver HTTP requests*** n/a
Robot Framework SeleniumLibrary Não há Utiliza Python n/a
ISFW Gera código **** Manipula browser, valida asserções via driver Java, também trabalha com o Webdriver/Remote Webdriver, Grid2 e Sauce on demand n/a
Hermes Pode-se adicionar um template no Selenium IDE Manipula browser, valida asserções via driver Java. Integração totam com Selenium Grid e infraestrutura da Saucelabs n/a

* Gerador de código interno, expecificamente para frameworks “out-of-the-box”, mas você pode modificar os templates baseados em Javascript para exibir qualquer tipo de código que desejar.

** Bromine foi criado especialmente para o Selenium e suporta diretamente o Seleium Core e Selenium Remote Control. Os outros frameworks utilizam drivers do Selenium Remote Control para teste.

*** Usando o driver apropriado (ou comandos HTTP), você pode manipular e testar o browser usando qualquer framework chamando comandos como “click” os “isElementPresent”. O Selenium Remote Control apenas trabalha com os comandos sem se importar com a chamada (origem) destes comandos.

**** Selenium

Selenium IDE Plug-in for InfoStretch Framework inclui um gerador para ISFW assim como outras extensões.

POSTS RELACIONADOS

AGENDA

CURSOS RELACIONADOS