You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							356 lines
						
					
					
						
							15 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							356 lines
						
					
					
						
							15 KiB
						
					
					
				| --- | |
| description: when working with playwright tests either generating them or using them to test code | |
| alwaysApply: false | |
| --- | |
| # Playwright Test Investigation — Harbor Pilot Directive | |
| 
 | |
| **Author**: Matthew Raymer   | |
| **Date**: 2025-08-21T14:22Z   | |
| **Status**: 🎯 **ACTIVE** - Playwright test debugging guidelines | |
| 
 | |
| ## Objective | |
| Provide systematic approach for investigating Playwright test failures with focus on UI element conflicts, timing issues, and selector ambiguity. | |
| 
 | |
| ## Context & Scope | |
| - **Audience**: Developers debugging Playwright test failures | |
| - **In scope**: Test failure analysis, selector conflicts, UI state investigation, timing issues | |
| - **Out of scope**: Test writing best practices, CI/CD configuration | |
| 
 | |
| ## Artifacts & Links | |
| - Test results: `test-results/` directory | |
| - Error context: `error-context.md` files with page snapshots | |
| - Trace files: `trace.zip` files for failed tests | |
| - HTML reports: Interactive test reports with screenshots | |
| 
 | |
| ## Environment & Preconditions | |
| - OS/Runtime: Linux/Windows/macOS with Node.js | |
| - Versions: Playwright test framework, browser drivers | |
| - Services: Local test server (localhost:8080), test data setup | |
| - Auth mode: None required for test investigation | |
| 
 | |
| ## Architecture / Process Overview | |
| Playwright test investigation follows a systematic diagnostic workflow that leverages built-in debugging tools and error context analysis. | |
| 
 | |
| ```mermaid | |
| flowchart TD | |
|     A[Test Failure] --> B[Check Error Context] | |
|     B --> C[Analyze Page Snapshot] | |
|     C --> D[Identify UI Conflicts] | |
|     D --> E[Check Trace Files] | |
|     E --> F[Verify Selector Uniqueness] | |
|     F --> G[Test Selector Fixes] | |
|     G --> H[Document Root Cause] | |
|      | |
|     B --> I[Check Test Results Directory] | |
|     I --> J[Locate Failed Test Results] | |
|     J --> K[Extract Error Details] | |
|      | |
|     D --> L[Multiple Alerts?] | |
|     L --> M[Button Text Conflicts?] | |
|     M --> N[Timing Issues?] | |
|      | |
|     E --> O[Use Trace Viewer] | |
|     O --> P[Analyze Action Sequence] | |
|     P --> Q[Identify Failure Point] | |
| ``` | |
| 
 | |
| ## Interfaces & Contracts | |
| 
 | |
| ### Test Results Structure | |
| | Component | Format | Content | Validation | | |
| |---|---|---|---| | |
| | Error Context | Markdown | Page snapshot in YAML | Verify DOM state matches test expectations | | |
| | Trace Files | ZIP archive | Detailed execution trace | Use `npx playwright show-trace` | | |
| | HTML Reports | Interactive HTML | Screenshots, traces, logs | Check browser for full report | | |
| | JSON Results | JSON | Machine-readable results | Parse for automated analysis | | |
| 
 | |
| ### Investigation Commands | |
| | Step | Command | Expected Output | Notes | | |
| |---|---|---|---| | |
| | Locate failed tests | `find test-results -name "*test-name*"` | Test result directories | Use exact test name patterns | | |
| | Check error context | `cat test-results/*/error-context.md` | Page snapshots | Look for UI state conflicts | | |
| | View traces | `npx playwright show-trace trace.zip` | Interactive trace viewer | Analyze exact failure sequence | | |
| 
 | |
| ## Repro: End-to-End Investigation Procedure | |
| 
 | |
| ### 1. Locate Failed Test Results | |
| ```bash | |
| # Find all results for a specific test | |
| find test-results -name "*test-name*" -type d | |
| 
 | |
| # Check for error context files | |
| find test-results -name "error-context.md" | head -5 | |
| ``` | |
| 
 | |
| ### 2. Analyze Error Context | |
| ```bash | |
| # Read error context for specific test | |
| cat test-results/test-name-test-description-browser/error-context.md | |
| 
 | |
| # Look for UI conflicts in page snapshot | |
| grep -A 10 -B 5 "button.*Yes\|button.*No" test-results/*/error-context.md | |
| ``` | |
| 
 | |
| ### 3. Check Trace Files | |
| ```bash | |
| # List available trace files | |
| find test-results -name "*.zip" | grep trace | |
| 
 | |
| # View trace in browser | |
| npx playwright show-trace test-results/test-name/trace.zip | |
| ``` | |
| 
 | |
| ### 4. Investigate Selector Issues | |
| ```typescript | |
| // Check for multiple elements with same text | |
| await page.locator('button:has-text("Yes")').count(); // Should be 1 | |
| 
 | |
| // Use more specific selectors | |
| await page.locator('div[role="alert"]:has-text("Register") button:has-text("Yes")').click(); | |
| ``` | |
| 
 | |
| ## What Works (Evidence) | |
| - ✅ **Error context files** provide page snapshots showing exact DOM state at failure   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: `test-results/60-new-activity-New-offers-for-another-user-chromium/error-context.md` shows both alerts visible   | |
|   - **Verify at**: Error context files in test results directory | |
| 
 | |
| - ✅ **Trace files** capture detailed execution sequence for failed tests   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: `trace.zip` files available for all failed tests   | |
|   - **Verify at**: Use `npx playwright show-trace <filename>` | |
| 
 | |
| - ✅ **Page snapshots** reveal UI conflicts like multiple alerts with duplicate button text   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: YAML snapshots show registration + export alerts simultaneously   | |
|   - **Verify at**: Error context markdown files | |
| 
 | |
| ## What Doesn't (Evidence & Hypotheses) | |
| - ❌ **Generic selectors** fail with multiple similar elements at `test-playwright/testUtils.ts:161`   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: `button:has-text("Yes")` matches both "Yes" and "Yes, Export Data"   | |
|   - **Hypothesis**: Selector ambiguity due to multiple alerts with conflicting button text   | |
|   - **Next probe**: Use more specific selectors or dismiss alerts sequentially | |
| 
 | |
| - ❌ **Timing-dependent tests** fail due to alert stacking at `src/views/ContactsView.vue:860,1283`   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: Both alerts use identical 1000ms delays, ensuring simultaneous display   | |
|   - **Hypothesis**: Race condition between alert displays creates UI conflicts   | |
|   - **Next probe**: Implement alert queuing or prevent overlapping alerts | |
| 
 | |
| ## Risks, Limits, Assumptions | |
| - **Trace file size**: Large trace files may impact storage and analysis time | |
| - **Browser compatibility**: Trace viewer requires specific browser support | |
| - **Test isolation**: Shared state between tests may affect investigation results | |
| - **Timing sensitivity**: Tests may pass/fail based on system performance | |
| 
 | |
| ## Next Steps | |
| | Owner | Task | Exit Criteria | Target Date (UTC) | | |
| |---|---|---|---| | |
| | Development Team | Fix test selectors for multiple alerts | All tests pass consistently | 2025-08-22 | | |
| | Development Team | Implement alert queuing system | No overlapping alerts with conflicting buttons | 2025-08-25 | | |
| | Development Team | Add test IDs to alert buttons | Unique selectors for all UI elements | 2025-08-28 | | |
| 
 | |
| ## References | |
| - [Playwright Trace Viewer Documentation](https://playwright.dev/docs/trace-viewer) | |
| - [Playwright Test Results](https://playwright.dev/docs/test-reporters) | |
| - [Test Investigation Workflow](./research_diagnostic.mdc) | |
| 
 | |
| ## Competence Hooks | |
| - **Why this works**: Systematic investigation leverages Playwright's built-in debugging tools to identify root causes | |
| - **Common pitfalls**: Generic selectors fail with multiple similar elements; timing issues create race conditions; alert stacking causes UI conflicts | |
| - **Next skill unlock**: Implement unique test IDs and handle alert dismissal order in test flows | |
| - **Teach-back**: "How would you investigate a Playwright test failure using error context, trace files, and page snapshots?" | |
| 
 | |
| ## Collaboration Hooks | |
| - **Reviewers**: QA team, test automation engineers | |
| - **Sign-off checklist**: Error context analyzed, trace files reviewed, root cause identified, fix implemented and tested | |
| 
 | |
| ## Assumptions & Limits | |
| - Test results directory structure follows Playwright conventions | |
| - Trace files are enabled in configuration (`trace: "retain-on-failure"`) | |
| - Error context files contain valid YAML page snapshots | |
| - Browser environment supports trace viewer functionality | |
| 
 | |
| --- | |
| 
 | |
| **Status**: Active investigation directive   | |
| **Priority**: High   | |
| **Maintainer**: Development team   | |
| **Next Review**: 2025-09-21 | |
| # Playwright Test Investigation — Harbor Pilot Directive | |
| 
 | |
| **Author**: Matthew Raymer   | |
| **Date**: 2025-08-21T14:22Z   | |
| **Status**: 🎯 **ACTIVE** - Playwright test debugging guidelines | |
| 
 | |
| ## Objective | |
| Provide systematic approach for investigating Playwright test failures with focus on UI element conflicts, timing issues, and selector ambiguity. | |
| 
 | |
| ## Context & Scope | |
| - **Audience**: Developers debugging Playwright test failures | |
| - **In scope**: Test failure analysis, selector conflicts, UI state investigation, timing issues | |
| - **Out of scope**: Test writing best practices, CI/CD configuration | |
| 
 | |
| ## Artifacts & Links | |
| - Test results: `test-results/` directory | |
| - Error context: `error-context.md` files with page snapshots | |
| - Trace files: `trace.zip` files for failed tests | |
| - HTML reports: Interactive test reports with screenshots | |
| 
 | |
| ## Environment & Preconditions | |
| - OS/Runtime: Linux/Windows/macOS with Node.js | |
| - Versions: Playwright test framework, browser drivers | |
| - Services: Local test server (localhost:8080), test data setup | |
| - Auth mode: None required for test investigation | |
| 
 | |
| ## Architecture / Process Overview | |
| Playwright test investigation follows a systematic diagnostic workflow that leverages built-in debugging tools and error context analysis. | |
| 
 | |
| ```mermaid | |
| flowchart TD | |
|     A[Test Failure] --> B[Check Error Context] | |
|     B --> C[Analyze Page Snapshot] | |
|     C --> D[Identify UI Conflicts] | |
|     D --> E[Check Trace Files] | |
|     E --> F[Verify Selector Uniqueness] | |
|     F --> G[Test Selector Fixes] | |
|     G --> H[Document Root Cause] | |
|      | |
|     B --> I[Check Test Results Directory] | |
|     I --> J[Locate Failed Test Results] | |
|     J --> K[Extract Error Details] | |
|      | |
|     D --> L[Multiple Alerts?] | |
|     L --> M[Button Text Conflicts?] | |
|     M --> N[Timing Issues?] | |
|      | |
|     E --> O[Use Trace Viewer] | |
|     O --> P[Analyze Action Sequence] | |
|     P --> Q[Identify Failure Point] | |
| ``` | |
| 
 | |
| ## Interfaces & Contracts | |
| 
 | |
| ### Test Results Structure | |
| | Component | Format | Content | Validation | | |
| |---|---|---|---| | |
| | Error Context | Markdown | Page snapshot in YAML | Verify DOM state matches test expectations | | |
| | Trace Files | ZIP archive | Detailed execution trace | Use `npx playwright show-trace` | | |
| | HTML Reports | Interactive HTML | Screenshots, traces, logs | Check browser for full report | | |
| | JSON Results | JSON | Machine-readable results | Parse for automated analysis | | |
| 
 | |
| ### Investigation Commands | |
| | Step | Command | Expected Output | Notes | | |
| |---|---|---|---| | |
| | Locate failed tests | `find test-results -name "*test-name*"` | Test result directories | Use exact test name patterns | | |
| | Check error context | `cat test-results/*/error-context.md` | Page snapshots | Look for UI state conflicts | | |
| | View traces | `npx playwright show-trace trace.zip` | Interactive trace viewer | Analyze exact failure sequence | | |
| 
 | |
| ## Repro: End-to-End Investigation Procedure | |
| 
 | |
| ### 1. Locate Failed Test Results | |
| ```bash | |
| # Find all results for a specific test | |
| find test-results -name "*test-name*" -type d | |
| 
 | |
| # Check for error context files | |
| find test-results -name "error-context.md" | head -5 | |
| ``` | |
| 
 | |
| ### 2. Analyze Error Context | |
| ```bash | |
| # Read error context for specific test | |
| cat test-results/test-name-test-description-browser/error-context.md | |
| 
 | |
| # Look for UI conflicts in page snapshot | |
| grep -A 10 -B 5 "button.*Yes\|button.*No" test-results/*/error-context.md | |
| ``` | |
| 
 | |
| ### 3. Check Trace Files | |
| ```bash | |
| # List available trace files | |
| find test-results -name "*.zip" | grep trace | |
| 
 | |
| # View trace in browser | |
| npx playwright show-trace test-results/test-name/trace.zip | |
| ``` | |
| 
 | |
| ### 4. Investigate Selector Issues | |
| ```typescript | |
| // Check for multiple elements with same text | |
| await page.locator('button:has-text("Yes")').count(); // Should be 1 | |
| 
 | |
| // Use more specific selectors | |
| await page.locator('div[role="alert"]:has-text("Register") button:has-text("Yes")').click(); | |
| ``` | |
| 
 | |
| ## What Works (Evidence) | |
| - ✅ **Error context files** provide page snapshots showing exact DOM state at failure   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: `test-results/60-new-activity-New-offers-for-another-user-chromium/error-context.md` shows both alerts visible   | |
|   - **Verify at**: Error context files in test results directory | |
| 
 | |
| - ✅ **Trace files** capture detailed execution sequence for failed tests   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: `trace.zip` files available for all failed tests   | |
|   - **Verify at**: Use `npx playwright show-trace <filename>` | |
| 
 | |
| - ✅ **Page snapshots** reveal UI conflicts like multiple alerts with duplicate button text   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: YAML snapshots show registration + export alerts simultaneously   | |
|   - **Verify at**: Error context markdown files | |
| 
 | |
| ## What Doesn't (Evidence & Hypotheses) | |
| - ❌ **Generic selectors** fail with multiple similar elements at `test-playwright/testUtils.ts:161`   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: `button:has-text("Yes")` matches both "Yes" and "Yes, Export Data"   | |
|   - **Hypothesis**: Selector ambiguity due to multiple alerts with conflicting button text   | |
|   - **Next probe**: Use more specific selectors or dismiss alerts sequentially | |
| 
 | |
| - ❌ **Timing-dependent tests** fail due to alert stacking at `src/views/ContactsView.vue:860,1283`   | |
|   - **Time**: 2025-08-21T14:22Z   | |
|   - **Evidence**: Both alerts use identical 1000ms delays, ensuring simultaneous display   | |
|   - **Hypothesis**: Race condition between alert displays creates UI conflicts   | |
|   - **Next probe**: Implement alert queuing or prevent overlapping alerts | |
| 
 | |
| ## Risks, Limits, Assumptions | |
| - **Trace file size**: Large trace files may impact storage and analysis time | |
| - **Browser compatibility**: Trace viewer requires specific browser support | |
| - **Test isolation**: Shared state between tests may affect investigation results | |
| - **Timing sensitivity**: Tests may pass/fail based on system performance | |
| 
 | |
| ## Next Steps | |
| | Owner | Task | Exit Criteria | Target Date (UTC) | | |
| |---|---|---|---| | |
| | Development Team | Fix test selectors for multiple alerts | All tests pass consistently | 2025-08-22 | | |
| | Development Team | Implement alert queuing system | No overlapping alerts with conflicting buttons | 2025-08-25 | | |
| | Development Team | Add test IDs to alert buttons | Unique selectors for all UI elements | 2025-08-28 | | |
| 
 | |
| ## References | |
| - [Playwright Trace Viewer Documentation](https://playwright.dev/docs/trace-viewer) | |
| - [Playwright Test Results](https://playwright.dev/docs/test-reporters) | |
| - [Test Investigation Workflow](./research_diagnostic.mdc) | |
| 
 | |
| ## Competence Hooks | |
| - **Why this works**: Systematic investigation leverages Playwright's built-in debugging tools to identify root causes | |
| - **Common pitfalls**: Generic selectors fail with multiple similar elements; timing issues create race conditions; alert stacking causes UI conflicts | |
| - **Next skill unlock**: Implement unique test IDs and handle alert dismissal order in test flows | |
| - **Teach-back**: "How would you investigate a Playwright test failure using error context, trace files, and page snapshots?" | |
| 
 | |
| ## Collaboration Hooks | |
| - **Reviewers**: QA team, test automation engineers | |
| - **Sign-off checklist**: Error context analyzed, trace files reviewed, root cause identified, fix implemented and tested | |
| 
 | |
| ## Assumptions & Limits | |
| - Test results directory structure follows Playwright conventions | |
| - Trace files are enabled in configuration (`trace: "retain-on-failure"`) | |
| - Error context files contain valid YAML page snapshots | |
| - Browser environment supports trace viewer functionality | |
| 
 | |
| --- | |
| 
 | |
| **Status**: Active investigation directive   | |
| **Priority**: High   | |
| **Maintainer**: Development team   | |
| **Next Review**: 2025-09-21
 | |
| 
 |