O padrão Page Object Model (POM) pode ser estruturado utilizando uma arquitetura de quatro camadas para orgnaizar testes de automação de forma eficiente.
Primeira camada: camada BaseNavegador, contém atributos e métodos comuns a todas as páginas, como interações com elementos e navegação. Crie uma pasta base e um arquivo base_navegador.py.
Segunda camada: camada ObjetosPagina, define classes específicas para cada página do aplicativo. Por exemplo, uma classe PaginaLogin e uma classe PaginaCadastro. Crie uma pasta objetos_pagina e um arquivo elementos_pagina.py.
Terceira camada: camada CasosTeste, contém os fluxos de negócio e casos de teste do projeto. Crie uma pasta casos_teste e um arquivo teste_autenticacao.py.
Quarta camada: DadosTeste, gerencia os dados utilizados nos testes.
Código da primeira camada (BaseNavegador):
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
class BaseNavegador:
def __init__(self, driver_path=r'C:\Caminho\Para\ChromeDriver\chromedriver.exe'):
self.servico = Service(driver_path)
self.navegador = webdriver.Chrome(service=self.servico)
def encontrar_elemento(self, seletor):
return self.navegador.find_element(*seletor)
def inserir_dado(self, seletor, valor):
return self.encontrar_elemento(seletor).send_keys(valor)
def acionar_elemento(self, seletor):
return self.encontrar_elemento(seletor).click()
Código da segunda camada (elementos_pagina.py):
from selenium.webdriver.common.by import By
from base.base_navegador import BaseNavegador
class PaginaLogin(BaseNavegador):
campo_usuario = (By.XPATH, "//input[@name='username']")
campo_senha = (By.XPATH, "//input[@type='password']")
campo_codigo = (By.XPATH, "//input[@id='verification-code']")
botao_entrar = (By.XPATH, "//button[@type='submit']")
url_pagina = "https://exemplo.com/login"
def realizar_login(self, usuario, senha, codigo):
self.navegador.get(self.url_pagina)
self.inserir_dado(seletor=self.campo_usuario, valor=usuario)
self.inserir_dado(seletor=self.campo_senha, valor=senha)
self.inserir_dado(seletor=self.campo_codigo, valor=codigo)
self.acionar_elemento(seletor=self.botao_entrar)
Código da terceira camada (teste_autenticacao.py):
import unittest
from selenium import webdriver
from objetos_pagina.elementos_pagina import PaginaLogin
class TesteAutenticacao(unittest.TestCase):
def teste_login_valido(self):
# Instanciar objeto da página de login
pagina_login = PaginaLogin()
credenciais = {
'usuario': 'teste_usuario',
'senha': 'SenhaForte123',
'codigo': '1234'
}
pagina_login.realizar_login(
usuario=credenciais['usuario'],
senha=credenciais['senha'],
codigo=credenciais['codigo']
)
Com essa estrutura, o framework POM para testes de autenticação está implementado, promovendo uma organização clara e manutenção facilitada dos testes de automação.