- Add dedicated AttendeeFilterPage for isolating filtering functionality - Create optimized certificate test focusing on attendee search - Document testing strategy and best practices - Add script to analyze and improve Playwright configuration - Create optimized Playwright configuration template - Resolve test stability issues with simplified approach - Improve test isolation and reliability for certificates
		
			
				
	
	
		
			242 lines
		
	
	
		
			No EOL
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			242 lines
		
	
	
		
			No EOL
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # E2E Testing Suite Optimization Script
 | |
| # This script helps troubleshoot and optimize the Playwright E2E testing configuration
 | |
| 
 | |
| echo "===== HVAC Community Events E2E Testing Suite Optimization ====="
 | |
| echo
 | |
| 
 | |
| # Step 1: Check for multiple Playwright installations
 | |
| echo "Step 1: Checking for duplicate Playwright installations..."
 | |
| PLAYWRIGHT_GLOBAL=$(npm list -g playwright | grep playwright | wc -l)
 | |
| PLAYWRIGHT_LOCAL_DEP=$(npm list playwright | grep playwright | wc -l)
 | |
| PLAYWRIGHT_TEST_DEP=$(npm list @playwright/test | grep @playwright/test | wc -l)
 | |
| 
 | |
| echo "Playwright global installations: $PLAYWRIGHT_GLOBAL"
 | |
| echo "Playwright local installations: $PLAYWRIGHT_LOCAL_DEP"
 | |
| echo "@playwright/test installations: $PLAYWRIGHT_TEST_DEP"
 | |
| 
 | |
| if [ $PLAYWRIGHT_LOCAL_DEP -gt 1 ] || [ $PLAYWRIGHT_TEST_DEP -gt 1 ]; then
 | |
|     echo "⚠️  Detected multiple Playwright instances. This may cause conflicts."
 | |
|     echo "    Consider fixing with: npm uninstall playwright && npm install playwright@latest"
 | |
| else
 | |
|     echo "✅ Playwright installation looks good."
 | |
| fi
 | |
| 
 | |
| echo
 | |
| 
 | |
| # Step 2: Check for proper directory structure
 | |
| echo "Step 2: Verifying E2E test directory structure..."
 | |
| UTILS_DIR="./tests/e2e/utils"
 | |
| PAGES_DIR="./tests/e2e/pages"
 | |
| CONFIG_FILE="./playwright.config.ts"
 | |
| 
 | |
| if [ -d "$UTILS_DIR" ] && [ -d "$PAGES_DIR" ] && [ -f "$CONFIG_FILE" ]; then
 | |
|     echo "✅ Basic directory structure is in place."
 | |
| else
 | |
|     echo "❌ Missing critical directories or files:"
 | |
|     [ ! -d "$UTILS_DIR" ] && echo "   - Missing $UTILS_DIR"
 | |
|     [ ! -d "$PAGES_DIR" ] && echo "   - Missing $PAGES_DIR"
 | |
|     [ ! -f "$CONFIG_FILE" ] && echo "   - Missing $CONFIG_FILE"
 | |
| fi
 | |
| 
 | |
| echo
 | |
| 
 | |
| # Step 3: Check dependencies in package.json
 | |
| echo "Step 3: Checking required dependencies..."
 | |
| MISSING_DEPS=0
 | |
| 
 | |
| check_dependency() {
 | |
|     local DEP=$1
 | |
|     local COUNT=$(npm list $DEP 2>/dev/null | grep $DEP | wc -l)
 | |
|     if [ $COUNT -eq 0 ]; then
 | |
|         echo "❌ Missing dependency: $DEP"
 | |
|         MISSING_DEPS=$((MISSING_DEPS + 1))
 | |
|     else
 | |
|         local VERSION=$(npm list $DEP | grep $DEP)
 | |
|         echo "✅ Found $VERSION"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| check_dependency "@playwright/test"
 | |
| check_dependency "playwright"
 | |
| check_dependency "dotenv"
 | |
| check_dependency "typescript"
 | |
| 
 | |
| if [ $MISSING_DEPS -gt 0 ]; then
 | |
|     echo
 | |
|     echo "⚠️  Some dependencies are missing. Consider running:"
 | |
|     echo "    npm install @playwright/test playwright dotenv typescript --save-dev"
 | |
| else
 | |
|     echo "✅ All required dependencies are installed."
 | |
| fi
 | |
| 
 | |
| echo
 | |
| 
 | |
| # Step 4: Check Playwright configuration
 | |
| echo "Step 4: Validating Playwright configuration..."
 | |
| if [ -f "$CONFIG_FILE" ]; then
 | |
|     CONFIG_ISSUES=0
 | |
|     
 | |
|     # Check for testDir setting
 | |
|     if grep -q "testDir:" "$CONFIG_FILE"; then
 | |
|         echo "✅ testDir setting found in configuration"
 | |
|     else
 | |
|         echo "❌ Missing 'testDir' setting in Playwright config"
 | |
|         CONFIG_ISSUES=$((CONFIG_ISSUES + 1))
 | |
|     fi
 | |
|     
 | |
|     # Check for projects setting
 | |
|     if grep -q "projects:" "$CONFIG_FILE"; then
 | |
|         echo "✅ projects setting found in configuration"
 | |
|     else
 | |
|         echo "❌ Missing 'projects' setting in Playwright config"
 | |
|         CONFIG_ISSUES=$((CONFIG_ISSUES + 1))
 | |
|     fi
 | |
|     
 | |
|     # Check for use setting
 | |
|     if grep -q "use:" "$CONFIG_FILE"; then
 | |
|         echo "✅ use setting found in configuration"
 | |
|     else
 | |
|         echo "❌ Missing 'use' setting in Playwright config"
 | |
|         CONFIG_ISSUES=$((CONFIG_ISSUES + 1))
 | |
|     fi
 | |
|     
 | |
|     if [ $CONFIG_ISSUES -gt 0 ]; then
 | |
|         echo
 | |
|         echo "⚠️  There are issues with your Playwright configuration."
 | |
|         echo "   Review the playwright.config.ts file and fix the noted issues."
 | |
|     else
 | |
|         echo "✅ Basic Playwright configuration looks good."
 | |
|     fi
 | |
| else
 | |
|     echo "❌ Playwright configuration file not found."
 | |
| fi
 | |
| 
 | |
| echo
 | |
| 
 | |
| # Step 5: Test an optimized certificate test
 | |
| echo "Step 5: Setting up and testing optimized certificate test..."
 | |
| 
 | |
| if [ -f "./tests/e2e/optimized-certificate-tests.ts" ]; then
 | |
|     echo "✅ Optimized certificate test found."
 | |
|     echo "   Running npx playwright test tests/e2e/optimized-certificate-tests.ts --headed --workers=1"
 | |
|     
 | |
|     # Uncomment to actually run the test
 | |
|     # npx playwright test tests/e2e/optimized-certificate-tests.ts --headed --workers=1
 | |
|     
 | |
|     echo "⚠️  Test execution commented out. Uncomment in script to run actual test."
 | |
| else
 | |
|     echo "❌ Optimized certificate test not found."
 | |
|     echo "   Make sure optimized-certificate-tests.ts exists in tests/e2e directory."
 | |
| fi
 | |
| 
 | |
| echo
 | |
| 
 | |
| # Step 6: Create improved configuration
 | |
| echo "Step 6: Creating improved Playwright configuration..."
 | |
| 
 | |
| cat > playwright.config.optimized.ts << 'EOF'
 | |
| import { defineConfig, devices } from '@playwright/test';
 | |
| import path from 'path';
 | |
| import dotenv from 'dotenv';
 | |
| 
 | |
| // Load environment variables
 | |
| dotenv.config();
 | |
| 
 | |
| // Base URL for all tests
 | |
| const BASE_URL = process.env.BASE_URL || 'https://wordpress-974670-5399585.cloudwaysapps.com';
 | |
| 
 | |
| /**
 | |
|  * Optimized Playwright configuration
 | |
|  * - Simplified configuration focusing on reliability
 | |
|  * - Reduced dependencies on external utilities
 | |
|  * - Streamlined reporter configuration
 | |
|  */
 | |
| export default defineConfig({
 | |
|   // Basic test configuration
 | |
|   testDir: './tests/e2e',
 | |
|   timeout: 45000, // Increased timeout for WordPress operations
 | |
|   fullyParallel: false, // Disable parallel tests for WordPress to prevent conflicts
 | |
|   forbidOnly: !!process.env.CI,
 | |
|   retries: process.env.CI ? 2 : 1, // Add one retry even in development
 | |
|   workers: 1, // Limit to one worker for WordPress tests
 | |
|   
 | |
|   // Simple reporter configuration
 | |
|   reporter: [
 | |
|     ['list'], // More informative than dot reporter
 | |
|     ['html', { open: 'never' }], // HTML report for better visualization
 | |
|   ],
 | |
| 
 | |
|   // Global test configuration
 | |
|   use: {
 | |
|     baseURL: BASE_URL,
 | |
|     trace: 'retain-on-failure',
 | |
|     screenshot: 'only-on-failure',
 | |
|     video: 'retain-on-failure',
 | |
|     
 | |
|     // Browser context options
 | |
|     viewport: { width: 1280, height: 720 },
 | |
|     ignoreHTTPSErrors: true, // Needed for many WordPress staging sites
 | |
|     
 | |
|     // Actionability configuration
 | |
|     actionTimeout: 15000, // Increase timeout for WordPress slow UI
 | |
|   },
 | |
| 
 | |
|   // Test projects - minimal configuration for stability
 | |
|   projects: [
 | |
|     {
 | |
|       name: 'chromium',
 | |
|       use: { ...devices['Desktop Chrome'] },
 | |
|     },
 | |
|   ],
 | |
|   
 | |
|   // Global setup/teardown - minimal stubs
 | |
|   globalSetup: './tests/e2e/global-setup.js',
 | |
|   globalTeardown: './tests/e2e/global-teardown.js',
 | |
| });
 | |
| EOF
 | |
| 
 | |
| echo "✅ Created optimized Playwright configuration: playwright.config.optimized.ts"
 | |
| 
 | |
| echo
 | |
| 
 | |
| # Step 7: Recommendations
 | |
| echo "Step 7: Recommendations for E2E test suite optimization"
 | |
| echo
 | |
| echo "Based on the analysis, here are key recommendations:"
 | |
| echo
 | |
| echo "1. Package and Dependency Management:"
 | |
| echo "   - ✅ Use a single version of Playwright and @playwright/test"
 | |
| echo "   - ✅ Pin dependency versions in package.json"
 | |
| echo "   - ✅ Consider using npm-check-updates to safely update dependencies"
 | |
| echo
 | |
| echo "2. Configuration Structure:"
 | |
| echo "   - ✅ Use the optimized configuration file created by this script"
 | |
| echo "   - ✅ Reduce dependencies on complex utility functions"
 | |
| echo "   - ✅ Simplify test setup with direct configuration"
 | |
| echo
 | |
| echo "3. Test Organization:"
 | |
| echo "   - ✅ Focus on writing independent, self-contained tests"
 | |
| echo "   - ✅ Use the Page Object Model pattern consistently"
 | |
| echo "   - ✅ Keep selectors centralized in Page classes"
 | |
| echo
 | |
| echo "4. Troubleshooting Common Issues:"
 | |
| echo "   - ✅ Test describe() and use() conflicts in imports"
 | |
| echo "   - ✅ Check for multiple versions of Playwright"
 | |
| echo "   - ✅ Use --headed and --slow flags for debugging"
 | |
| echo "   - ✅ Add page.pause() for interactive debugging"
 | |
| echo
 | |
| echo "5. Certificate Testing Specific:"
 | |
| echo "   - ✅ Use the optimized certificate test as a template"
 | |
| echo "   - ✅ Focus on testing one feature at a time"
 | |
| echo "   - ✅ Add proper screenshots for validation"
 | |
| echo 
 | |
| echo "To apply the optimized configuration:"
 | |
| echo "  cp playwright.config.optimized.ts playwright.config.ts"
 | |
| echo
 | |
| echo "To run certificate tests with the optimized config:"
 | |
| echo "  npx playwright test tests/e2e/optimized-certificate-tests.ts --config=playwright.config.optimized.ts --headed"
 | |
| 
 | |
| echo
 | |
| echo "===== E2E TESTING SUITE OPTIMIZATION COMPLETE =====" |