Web Application Testing
To test local web applications, write native Python Playwright scripts.
Decision Tree: Choosing Your Approach
code
User task -> Is it static HTML?
|-- Yes -> Read HTML file directly to identify selectors
| |-- Success -> Write Playwright script using selectors
| |-- Fails/Incomplete -> Treat as dynamic (below)
|
|-- No (dynamic webapp) -> Is the server already running?
|-- No -> Start the server first, then proceed
|-- Yes -> Reconnaissance-then-action:
1. Navigate and wait for networkidle
2. Take screenshot or inspect DOM
3. Identify selectors from rendered state
4. Execute actions with discovered selectors
Reconnaissance-Then-Action Pattern
- •
Inspect rendered DOM:
pythonpage.screenshot(path='/tmp/inspect.png', full_page=True) content = page.content() page.locator('button').all() - •
Identify selectors from inspection results
- •
Execute actions using discovered selectors
Example Script
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto('http://localhost:5173')
page.wait_for_load_state('networkidle') # CRITICAL: Wait for JS to execute
# ... your automation logic
browser.close()
Best Practices
- •Use
sync_playwright()for synchronous scripts - •Always close the browser when done
- •Use descriptive selectors:
text=,role=, CSS selectors, or IDs - •Add appropriate waits:
page.wait_for_selector()orpage.wait_for_timeout() - •Always wait for
networkidlebefore inspecting dynamic apps