Middle
O que é o padrão Page Object?
sobes.tech IA
Resposta da IA
O padrão Page Object (PO) é um modelo de design para a automação de testes de interfaces web, que representa as páginas web como classes. Cada classe PO encapsula os elementos e ações realizados pelo utilizador numa página específica.
Vantagens do seu uso:
- Legibilidade: O código de teste torna-se mais compreensível, pois interage com as páginas e seus elementos através de métodos de alto nível.
- Manutenção: Quando os localizadores de elementos na página mudam, basta fazer alterações apenas na classe correspondente do Page Object, sem precisar reescrever os testes que usam esses elementos.
- Reutilização: Os métodos e elementos do Page Object podem ser utilizados em diferentes cenários de teste.
- Separação de responsabilidades: A lógica de interação com os elementos UI está separada da lógica do cenário de teste.
Componentes principais:
- Classes de páginas: Representam uma abstração de uma página web concreta.
- Elementos web: São definidos dentro da classe da página usando localizadores (XPath, seletores CSS, ID, etc.).
- Métodos: Representam ações que podem ser realizadas na página (por exemplo,
login(),addToCart(),search()). Estes métodos interagem com os elementos web.
Exemplo de estrutura:
# login_page.py
from selenium.webdriver.common.by import By
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_input = (By.ID, "username") # Localizador do campo de entrada de nome de utilizador
self.password_input = (By.ID, "password") # Localizador do campo de entrada de palavra-passe
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Localizador do botão de login
self.error_message = (By.CSS_SELECTOR, ".error-message") # Localizador da mensagem de erro
def open(self, url):
self.driver.get(url) # Abre a página
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Insere o nome de utilizador
self.driver.find_element(*self.password_input).send_keys(password) # Insere a palavra-passe
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Clica no botão de login
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Obtém o texto da mensagem de erro
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Importa a classe Page Object
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Inicializa o driver
self.login_page = LoginPage(self.driver) # Cria uma instância de Page Object
def tearDown(self):
self.driver.quit() # Encerra o driver
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Abre a página
self.login_page.enter_credentials("valid_user", "valid_password") # Insere os dados
self.login_page.click_login_button() # Clica no botão
# Verificações adicionais após login bem-sucedido
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Abre a página
self.login_page.enter_credentials("invalid_user", "wrong_password") # Insere os dados
self.login_page.click_login_button() # Clica no botão
error_text = self.login_page.get_error_message() # Obtém o texto do erro
self.assertIn("Credenciais incorretas", error_text) # Verifica a mensagem de erro
if __name__ == "__main__":
unittest.main()
Neste exemplo, LoginPage representa um Page Object para a página de login. Os testes em test_login.py usam os métodos desta classe, abstraídos dos detalhes de interação com os elementos.
O padrão Page Object é um padrão de facto na automação de testes de interfaces web devido às suas vantagens em termos de manutenção e legibilidade.