Skip to main content

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 timeouts
✅ Good: Wait for specific conditions

2. 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):
  1. getByRole() - semantic HTML roles
  2. getByText() - visible text content
  3. getByTestId() - explicit test IDs
  4. locator() 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 in playwright.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

When spawnWindow is false, terminals run server-side:

Summary

  1. Never use waitForTimeout() - always wait for specific conditions
  2. Use web-first assertions that auto-wait
  3. Prefer semantic locators over CSS selectors
  4. Wait for observable conditions not arbitrary time
  5. Configure appropriate timeouts for your application
  6. Keep tests isolated and independent
  7. Use Playwright’s built-in debugging tools for flaky tests
By following these practices, tests will be more reliable, faster, and easier to maintain.