Sistema em Python/Flask para gravar, armazenar e executar fluxos de automação de webapps usando Playwright.
📖 Documentação Completa: Consulte o GUIA_USO.md para instruções detalhadas de instalação, configuração e uso do sistema.
- Value Objects implementados (SeletorCSS, URL, Timeout, Mensagem)
- Entities implementadas (Acao, Fluxo, Transacao, ResultadoExecucao)
- Collections implementadas (Acoes, Fluxos, Transacoes, Mensagens)
- Testes unitários completos (59 testes passando)
- StorageConfig (Value Object)
- JsonStorage com thread-safety (fcntl locks)
- Repositories (FluxoRepository, TransacaoRepository)
- Serializers (FluxoSerializer, TransacaoSerializer)
- Exceções específicas de repositório
- Testes unitários e de integração (29 testes passando)
- ConfiguracaoPlaywright (Value Object)
- BrowserFactory (criação de browsers)
- PageWrapper (wrapper limpo sobre Playwright Page)
- Executores especializados (Navegador, Preenchedor, Aguardador, Validador)
- ExecutorPlaywright (orquestrador principal)
- ExecutorAcoes (serviço de domínio)
- Ajustes no domínio (metadados em Acao)
- Testes unitários com mocks (20 testes passando)
- DTOs (Data Transfer Objects) para entrada e saída
- Exceções de aplicação (FluxoJaExisteError, ValoresInvalidosError, etc)
- 7 Casos de Uso implementados:
- GravarFluxoUseCase
- ExecutarFluxoUseCase
- ExecutarLoteUseCase
- ListarFluxosUseCase
- ObterFluxoUseCase
- ListarTransacoesUseCase
- ObterTransacaoUseCase
- Ajustes no domínio (descricao, url_inicial em Fluxo)
- Testes unitários com mocks (16 testes passando)
- AppConfig (Value Object para configuração)
- DependencyContainer (injeção de dependências)
- RequestSerializer e ResponseSerializer
- Error handlers globais
- Rotas REST completas:
- GET /health
- GET /api/fluxos
- POST /api/fluxos
- GET /api/fluxos/{id}
- POST /api/transacoes/executar
- POST /api/transacoes/executar-lote
- GET /api/transacoes
- GET /api/transacoes/{id}
- Flask app factory
- CORS configurado
- Testes de integração da API (10 testes passando)
- Templates HTML (base, index, gravar, executar, relatorios)
- CSS responsivo e moderno
- JavaScript vanilla (sem frameworks)
- API Client para comunicação com backend
- Funcionalidades:
- Página principal com lista de fluxos
- Formulário de gravação de fluxos
- Interface de execução (simples e em lote)
- Relatórios e histórico de transações
- Design responsivo (mobile-friendly)
- Feedback visual (loading, sucesso, erro)
- Integração completa com API REST
- Python 3.10+
- Playwright (instalação global)
# Criar ambiente virtual
python3 -m venv venv
source venv/bin/activate
# Instalar dependências
# Nota: O Playwright está listado no requirements.txt, mas se você usar
# o ambiente compartilhado abaixo, pode pular a instalação do Playwright
pip install -r requirements.txt
# Instalar Playwright (ambiente compartilhado para múltiplos projetos)
# Esta instalação permite reutilizar o Playwright em diversos projetos
# Execute apenas uma vez (na primeira vez que usar Playwright)
mkdir -p ~/.playwright-env
python3 -m venv ~/.playwright-env
source ~/.playwright-env/bin/activate
pip install playwright
playwright install
deactivate # sair do ambiente compartilhado# Desenvolvimento (porta detectada automaticamente, padrão: 5001)
python app.py
# Desenvolvimento com porta específica
export SMAW_PORT=5002
python app.py
# Produção (WSGI)
# Nota: Instale o gunicorn separadamente: pip install gunicorn
export SMAW_PORT=5000 # opcional
gunicorn wsgi:appDetecção automática de portas:
- A aplicação detecta automaticamente se a porta padrão (5001) está disponível
- Se não estiver, tenta portas subsequentes (5002, 5003, etc.)
- Você pode forçar uma porta específica via variável de ambiente
SMAW_PORT - A porta detectada é exibida na inicialização do servidor
Interface Web:
- Acesse
http://localhost:5001(ou a porta detectada) no navegador - Páginas disponíveis:
/- Página principal/gravar- Gravar novo fluxo/executar- Executar fluxo existente/relatorios- Visualizar histórico
# Todos os testes (135 testes passando)
pytest tests/ -v
# Testes unitários do domínio
pytest tests/unit/domain/ -v
# Testes de integração da API
pytest tests/integration/test_api_*.py -v
# Com cobertura
pytest tests/ --cov=domain --cov-report=htmlwebapp-automator/
├── domain/ # Regras de negócio puras
│ ├── value_objects/ # Primitivos encapsulados
│ ├── entities/ # Entidades do domínio
│ ├── collections/ # First Class Collections
│ └── services/ # Serviços de domínio
├── infrastructure/ # Implementações técnicas
│ ├── storage/ # Armazenamento JSON
│ ├── repositories/ # Repositórios
│ ├── serialization/ # Serializadores
│ └── playwright/ # Integração Playwright
├── application/ # Casos de uso
│ ├── dtos/ # Data Transfer Objects
│ ├── exceptions/ # Exceções de aplicação
│ └── casos_uso/ # Casos de uso
├── presentation/ # Interface (Flask)
│ ├── api/ # Rotas REST
│ ├── serializers/ # Serializadores HTTP
│ ├── dependencies/ # Container de dependências
│ ├── templates/ # Templates HTML
│ └── static/ # Arquivos estáticos
│ ├── css/ # Estilos
│ └── js/ # JavaScript
├── app.py # Entry point (desenvolvimento)
├── wsgi.py # Entry point (produção)
└── tests/ # Testes
├── unit/ # Testes unitários
└── integration/ # Testes de integração
Este projeto segue rigorosamente:
- Object Calisthenics (9 regras)
- Clean Code principles
- Domain-Driven Design (DDD)
- SOLID principles
Este projeto é privado e de uso interno.