Esta solução é um BOT de automação (RPA) desenvolvido para resolver o RPA Challenge. O objetivo é demonstrar proficiência na criação de automações robustos, estáveis e imunes a mudanças estruturais.
O FormSeeker utiliza uma estratégia avançada de localização de elementos para garantir que o preenchimento seja 100% preciso em todas as 10 rodadas, independentemente da posição aleatória dos campos na tela.
- Python 3.7+: Linguagem Principal e Lógica de Negócio.
- Selenium: Motor de Automação Web.
- Pandas / OpenPyXL: Manipulação de Dados Estruturados.
- Pytest: Framework de Testes.
- Docker & Docker Compose: Isolamento e Orquestração do Ambiente.
O projeto segue a arquitetura de Micro-serviços Light via Docker Compose para isolamento e reprodutibilidade:
- Serviço
selenium-chrome: Container dedicado que executa o navegador Google Chrome (e o servidor VNC) para a automação. - Serviço
app: Container leve que executa o código Python, agindo como o cliente do Selenium.
- Orquestração:
docker-composeinicia o Chrome e só depois dohealthcheckinicia o containerapp. - UX Delay: O robô exibe uma contagem regressiva de 10s no terminal, dando tempo ao usuário para abrir o VNC
localhost:7900. - Leitura: O
main.pyaciona a leitura da planilha (pandas). - Automação: O BOT navega, clica em Start, e então entra no loop das 10 rodadas.
A abordagem para lidar com os elementos dinâmicos foi a utilização de Seletores Relativos baseados na vizinhança (Sibling XPath).
- Problema: Os IDs
id="c81xn"mudam e o atributofor(que liga o<label>ao<input>) está ausente ou é imprevisível. - Solução: O bot ignora os IDs e procura o campo de entrada
<input>que é vizinho (irmão) da etiqueta<label>que contém o texto exato da planilha.
//label[normalize-space(text())='{NomeCampo}']/following-sibling::input
O projeto utiliza pytest para validar todas as quatro funções do automation_core.py (read_spreadsheet, start_driver, start_challenge e process_round). Os testes são de Integração, pois comprovam o funcionamento do navegador real.
A saúde do código é verificada automaticamente pelo GitHub Actions.
- Localização: O arquivo de workflow se encontra em
.github/workflows/ci.yml. - Comando de CI: O pipeline executa o comando de teste mais robusto:
docker-compose -f docker-compose.test.yml up --abort-on-container-exit --exit-code-from app. - Finalidade: Garante que a branch
mainsó receba código que passou 100% nos testes de integração.
O projeto é containerizado, minimizando as dependências do sistema operacional:
- Docker Desktop: Instale e garanta que ele esteja rodando no seu sistema (Windows/macOS/Linux).
- Git: Para clonar o repositório.
Abra o seu terminal (ou Git Bash) e clone o repositório:
git clone https://github.com/GustavoMartin2002/FormSeeker.git
cd FormSeeker
(Se preferir, pode simplesmente fazer o download do arquivo ZIP e descompactá-lo.)
- 1. Inicialização:
O Docker sobe o Chrome (Selenium) e oapp(BOT), esperando a prontidão do servidor (healthcheck).
docker-compose up --abort-on-container-exit
-
2. Contagem:
O BOT inicia uma contagem regressiva de 10 segundos no terminal. -
3. Ação do Usuário:
Acesse: http://localhost:7900 para ver a tela do BOT. -
4. Execução:
Após os 10 segundos, a automação começa a preencher as 10 rodadas. -
5. Encerramento
O container vai ser parado pela flag--abort-on-container-exitinserida no primeiro passo.
Usa o arquivo de teste dedicado docker-compose.test.yml para validar se a lógica de localização de elementos (a estratégia Sibling XPath) e a conexão estão funcionando.
docker-compose -f docker-compose.test.yml up --abort-on-container-exit
- O Docker sobe o Selenium e o
app(mas, desta vez, oapproda opytest). - O Pytest executa as verificações (leitura de arquivo, conexão e interação).
- Quando os testes acabam, o Docker fecha o navegador automaticamente.
- O terminal mostra
5 passede a mensagem de encerramento.
O projeto foi construído com foco em modularização (pastas functions e tests) e legibilidade. A escolha do Docker e do healthcheck visa o máximo de reprodutibilidade e estabilidade.