const { webkit } = require('playwright'); (async () => { console.log('๐Ÿงช Testing Safari compatibility with headless WebKit...'); const browser = await webkit.launch({ headless: true // headless to avoid CPU/display issues }); const context = await browser.newContext({ // Simulate Safari browser userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Safari/605.1.15' }); const page = await context.newPage(); // Track console messages and errors page.on('console', msg => { console.log(`[${msg.type().toUpperCase()}] ${msg.text()}`); }); page.on('pageerror', error => { console.log(`[PAGE ERROR] ${error.message}`); }); console.log('๐Ÿ“ Navigating to find-a-trainer page...'); try { await page.goto('https://upskill-staging.measurequick.com/find-a-trainer/', { waitUntil: 'networkidle', timeout: 30000 }); console.log('โœ… Page loaded successfully'); } catch (error) { console.log('โš ๏ธ Page load error:', error.message); // Try to get current page state even if navigation failed try { const currentUrl = await page.url(); console.log('๐Ÿ“ Current URL:', currentUrl); } catch (e) { console.log('โŒ Could not get page URL'); } } console.log('โณ Waiting for page to stabilize...'); await page.waitForTimeout(3000); // Get comprehensive browser state console.log('๐Ÿ” Analyzing browser state...'); const pageState = await page.evaluate(() => { return { url: window.location.href, title: document.title, readyState: document.readyState, scriptsLoaded: Array.from(document.querySelectorAll('script')).length, safariScriptBlocker: window.hvacSafariScriptBlocker ? 'active' : 'not found', hvacErrors: window.hvacErrors || [], bodyExists: !!document.body, hasContent: document.body ? document.body.innerHTML.length > 1000 : false }; }); console.log('๐Ÿ“Š Page state:', pageState); // Check Safari-specific scripts console.log('๐Ÿ” Checking Safari script loading...'); const allScripts = await page.evaluate(() => { return Array.from(document.querySelectorAll('script[src]')) .map(script => ({ src: script.src, isSafariCompatible: script.src.includes('safari-compatible'), isHVAC: script.src.includes('hvac') || script.src.includes('find-trainer') })); }); console.log('๐Ÿ“„ All scripts:', allScripts.length); const hvacScripts = allScripts.filter(s => s.isHVAC); const safariScripts = allScripts.filter(s => s.isSafariCompatible); console.log('๐ŸŽฏ HVAC scripts:', hvacScripts); console.log('โœ… Safari-compatible scripts:', safariScripts); // Test basic page functionality if content loaded if (pageState.hasContent) { console.log('๐Ÿงช Testing page functionality...'); try { // Check if trainer cards exist const trainerCards = await page.$$('.hvac-trainer-card'); console.log(`๐Ÿ‘ฅ Found ${trainerCards.length} trainer cards`); // Test if interactive elements are present const interactiveElements = await page.evaluate(() => { return { modals: document.querySelectorAll('[id*="modal"]').length, buttons: document.querySelectorAll('button, .btn').length, forms: document.querySelectorAll('form').length, maps: document.querySelectorAll('[id*="map"]').length }; }); console.log('๐ŸŽฏ Interactive elements:', interactiveElements); } catch (error) { console.log('โŒ Error testing functionality:', error.message); } } console.log('๐ŸŽ‰ Safari compatibility test completed'); await browser.close(); })();