Publicado
- 3 min read
Testes Automatizados com Selenium e Page Object Model em Ruby

Introdução
O Selenium é uma das ferramentas mais populares para automação de testes em aplicações web. Neste post, vamos explorar como implementar testes automatizados utilizando Selenium, Page Object Model (POM) e Capybara em Ruby. Essa combinação permite que você escreva testes mais organizados, fáceis de manter e escaláveis.
Pré-requisitos
Para seguir este tutorial, é importante que você tenha as seguintes ferramentas instaladas:
- Ruby (última versão estável)
- Bundler
- Capybara
- Selenium WebDriver
- Um navegador da sua escolha (e.g., Chrome, Firefox)
Você pode instalar as dependências necessárias criando um arquivo Gemfile
:
source 'https://rubygems.org'
gem 'capybara'
gem 'selenium-webdriver'
gem 'rspec'
E rodando o comando:
bundle install
Principais Conceitos
Selenium WebDriver
O Selenium WebDriver é uma API que permite controlar navegadores da web programaticamente. É uma ferramenta essencial para a automação de testes, permitindo que você execute interações do usuário, como cliques e preenchimento de formulários.
Page Object Model (POM)
O POM é um padrão de design que promove a organização e reutilização de código. Com esse padrão, criamos classes que representam páginas da aplicação, encapsulando a lógica de interação com os elementos da interface.
Exemplo de Código
Vamos criar um exemplo simples de um teste utilizando Capybara e Selenium:
Estrutura do projeto:
/tests
/pages
login_page.rb
login_spec.rb
login_page.rb
class LoginPage
include Capybara::DSL
def visit_page
visit '/login'
end
def fill_in_credentials(email, password)
fill_in 'Email', with: email
fill_in 'Password', with: password
end
def submit
click_button 'Log in'
end
end
login_spec.rb
require 'capybara/rspec'
require_relative 'pages/login_page'
Capybara.default_driver = :selenium
Capybara.app_host = 'http://your-application-url.com'
RSpec.describe 'Login', type: :feature do
let(:login_page) { LoginPage.new }
it 'logs in with valid credentials' do
login_page.visit_page
login_page.fill_in_credentials('user@example.com', 'password123')
login_page.submit
expect(page).to have_content('Welcome!')
end
end
Mini-Projeto Prático
Utilizando o código acima, você pode expandir o mini-projeto para criar testes adicionais, como logout, navegação por outras páginas ou validações de campos obrigatórios. Experimente criar uma página de registro (signup) utilizando o mesmo padrão de POM.
Padrões de Projeto Aconselhados
- Organização do código: Use páginas para encapsular a lógica de cada parte da UI. Isso facilita a manutenção.
- Nomenclatura clara: Escolha nomes descritivos para suas classes e métodos, o que torna o código mais legível.
- Separação de preocupações: Mantenha a lógica de teste separada da lógica de interação com a interface.
Pros e Contras
Prós
- Manutenção: O POM facilita a manutenção de testes.
- Reutilização de Código: Permite reutilizar código para interações comuns.
- Redução de Duplicação: Ajuda a evitar a duplicação de código em testes.
Contras
- Curva de Aprendizado: Pode ser um pouco desafiador para iniciantes entenderem o padrão POM.
- Complexidade: Para aplicações muito simples, pode adicionar complexidade desnecessária.
Performance de Cada Ferramenta
- Selenium: Alta compatibilidade com navegadores, mas pode ser mais lento em comparação com outras soluções como Cypress.
- Capybara: Facilita a escrita de testes em um estilo de DSL, mas depende do desempenho do Selenium para a execução.
Dicas de Próximos Passos
- Experimente adicionar testes para outras rotas de sua aplicação.
- Explore ferramentas de CI/CD para integrar seus testes automatizados.
- Aprofunde-se em tópicos como testes de API utilizando RSpec e HTTParty.
Possíveis Erros e Soluções
- Element not found: Verifique se o seletor utilizado no teste está correto e se a página foi carregada antes da interação.
- Timeouts: Aumente o tempo de espera padrão do Capybara, caso os elementos demorem a aparecer.
Links para Materiais de Apoio
Com essas orientações e exemplos, você já pode iniciar a implementação de testes automatizados em suas aplicações Ruby utilizando Selenium e Capybara. Boa sorte e bons testes!