Logo

Publicado

- 3 min read

Testes Automatizados com Selenium e Page Object Model em Ruby

img of 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.

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!