Automated form submissions across multiple websites using a clean, modular, and scalable architecture.
This project is a Proof of Concept demonstrating how to automate form submissions across different websites using:
- Playwright for browser automation
- Python (async) for concurrency
- Page Object Model (POM) for clean structure
- Centralized selectors for maintainability
- JSON‑based test data for flexibility
The architecture is intentionally simple, readable, and easy to extend.
Automation flow:
- Load browser and context
- Navigate to the selected website
- Load test data from
test_data.json - Fill form fields using reusable utilities
- Upload files if required
- Pause for preview (POC mode — no submission)
The project is structured so each website has its own page module and form logic, while shared utilities handle:
- filling inputs
- uploading files
- logging
- selectors
- browser initialization
project/
│
├── config/
│ └── settings.py
│
├── data/
│ ├── images/
│ └── test_data.json
│
├── pages/
│ ├── base_page.py
│ ├── ideakiln.py
│ ├── tinylaunchpad.py
│ └── tinylaunch.py
│
├── utils/
│ ├── browser.py
│ ├── form_filler.py
│ ├── selectors.py
│ └── logger.py
│
├── main.py
├── requirements.txt
└── LICENSE
┌──────────────────────┐
│ main.py │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Page Layer │
│ (pages/_page.py) │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Form Layer │
│ (pages/_form.py) │
└──────────┬───────────┘
│
▼
┌──────────────────────────────────────────┐
│ Utils Layer │
│ form_filler.py · selectors.py · logger.py│
└──────────────────────────────────────────┘
│
▼
┌──────────────────────┐
│ Playwright Engine │
└──────────────────────┘
bash
python -m venv venv
source venv/bin/activate # Linux / macOS
venv\Scripts\activate # Windows
pip install -r requirements.txt
playwright install
Run the main entry point:
python main.py
The script will:
-
Launch Playwright
-
Open the selected website
-
Load test data from test_data.json
-
Fill the form (POC mode — no submission)
5.Pause for preview
To add automation for a new site:
-
Create a new file in pages/
-
Add selectors in utils/selectors.py
-
Add test data in data/test_data.json
-
Implement:
-
load_test_data()
-
fill_form()
-
upload_files()
-
run_demo()
This architecture ensures minimal duplication and clean separation of responsibilities.
-
Add automatic form submission
-
Add error handling and retry logic
-
Add screenshots and tracing
-
Add CLI for selecting which site to automate
-
Add unit tests for selectors and utilities
This project is licensed under the MIT License. See the LICENSE file for details.