Skip to content

mcordal/webapp-automator

Repository files navigation

Sistema de Mapeamento e Automação de WebApps (SMAW)

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.

🎯 Status do Projeto

✅ Fase 1: COMPLETA

  • 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)

✅ Fase 2: COMPLETA

  • 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)

✅ Fase 3: COMPLETA

  • 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)

✅ Fase 4: COMPLETA

  • 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)

✅ Fase 5: COMPLETA

  • 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)

✅ Fase 6: COMPLETA

  • 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

📋 Requisitos

  • Python 3.10+
  • Playwright (instalação global)

🚀 Instalação

# 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

🌐 Executar API

# 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:app

Detecçã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

🧪 Executar Testes

# 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=html

📁 Estrutura do Projeto

webapp-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

🎨 Princípios de Código

Este projeto segue rigorosamente:

  • Object Calisthenics (9 regras)
  • Clean Code principles
  • Domain-Driven Design (DDD)
  • SOLID principles

📝 Licença

Este projeto é privado e de uso interno.

About

Sistema de Mapeamento e Automação de WebApps usando Python/Flask e Playwright

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published