Playwright Testing Best Practices for VibeTunnel
Overview
This guide documents best practices for writing reliable, non-flaky Playwright tests for VibeTunnel, based on official Playwright documentation and community best practices.Core Principles
1. Use Auto-Waiting Instead of Arbitrary Delays
❌ Bad: Arbitrary timeouts2. Use Web-First Assertions
Web-first assertions automatically wait and retry until the condition is met:3. Prefer User-Facing Locators
Locator Priority (best to worst):getByRole()
- semantic HTML rolesgetByText()
- visible text contentgetByTestId()
- explicit test IDslocator()
with CSS - last resort
VibeTunnel-Specific Patterns
Waiting for Terminal Ready
Instead of arbitrary delays, wait for terminal indicators:Handling Session Creation
Managing Modal Animations
Instead of waiting for animations, wait for the modal state:Session List Updates
Common Anti-Patterns to Avoid
1. Storing Element References
2. Assuming Immediate Availability
3. Fixed Sleep for Dynamic Content
Test Configuration
Timeouts
Configure appropriate timeouts inplaywright.config.ts
:
Test Isolation
Each test should be independent:Debugging Flaky Tests
1. Enable Trace Recording
2. Use Debug Mode
3. Add Strategic Logging
Terminal-Specific Patterns
Waiting for Terminal Output
Waiting for Shell Prompt
Handling Server-Side Terminals
WhenspawnWindow
is false, terminals run server-side:
Summary
- Never use
waitForTimeout()
- always wait for specific conditions - Use web-first assertions that auto-wait
- Prefer semantic locators over CSS selectors
- Wait for observable conditions not arbitrary time
- Configure appropriate timeouts for your application
- Keep tests isolated and independent
- Use Playwright’s built-in debugging tools for flaky tests