test-navigation-strategies.js•9.13 kB
#!/usr/bin/env node
/**
* Navigation Strategies Test - Different ways to handle page loading
*/
import { chromium } from 'playwright';
async function testNavigationStrategies() {
console.log('🔄 Testing different navigation strategies...');
const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFkbWluLmRlc2Vudm9sdmltZW50b0BldWNvbnF1aXN0by5jb20iLCJuYW1lIjoiQWRtaW4gRGV2Iiwib2lkIjoiNWZiM2RlYzYtYzQ5NC1lYzExLWEyMmEtZGM5ODQwNDFjOTVkIiwiZGlyZWN0b3J5IjoiYjBmZWY4NjAtYzQ5NC1lYzExLWEyMmEtZGM5ODQwNDFjOTVkIiwiYXBpbSI6IkVFQzUzQTI0LUVDMEUtNDFCOS05NDA1LTg2QTE3NTAwREIzNCIsImRpcm4iOiJEZXNlbnZvbHZpbWVudG8iLCJyb2xlIjpbIlJldmlld0NvbnRyaWJ1dG9yIiwiQ29udHJpYnV0b3JHbG9iYWwiLCJBZG1pbmlzdHJhdG9yR2xvYmFsIl0sImRjbiI6WyJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0dFYyMXRTRS1vZHA5NElpMnVVYTNqMXNxRXl6YWhrN3ZxWlN5MG5sLV94c3cyb0xEN05jT2ppRThWelhyZDBEamF3XzQyVW1fZmxrT1loZzlVN0ZKOGx5N1dWQVFBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0c2xCWS0zTjB5WkU1S1NNSFhKTzhjcm0wNS1remgtYVBzTXhtMnZvOTBxYzhXTjktX08wRzRMbmo5dDRqb2R4bnZNdVkycHJEd1NrYlkyamJOMnpuNXJvemJmR3dBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0dnpkMWU1SDFGTzVhenRyR1RuZXZ6emx0U0djM3VFT1IteHExWXZNVHF5NEstaThXR0gwd292cC1ka3FjNm82d2xSZkM0d3k5MVcxSHFqOFU4aEMtRWZMa0pSQUFBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0dU5XMnUyS3A5dXZhUGhkOFNpOE9KNV8yTmRmZnNTSC0temZHTXVmX084Wm5GbXFXRE5qeE1ubnBWelRkVTBPVF9mUldtNVVhTkxlV2oyTjY5Y3JRS0x1SmJQQUFBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0czY2NE5odVhwck52S3FiV1RuUEtGNTU2UzRycXdXNDJ1SnkzbjNGVkxFVjZ4VlljdU9kTnVrZXliMjdKbjRlOS1GaGNNdW1iOTZ1cUx0aEptSDJrX0h0U29MQUFBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREN3dWpCWjhyQW81RUxEaHRvQ2ZUdmVQcTVET2hpd1dtM3A2eFktTDdIYkpTb2RFU2I2SUVWQ3BQcXpETTJ2WlR6VzlsMXBrWlBFb3Zkbl8tV3R2LWY0bkt3dmEtU0FBQUFBRF9fdyJdLCJzY3AiOlsiSDRzSUFBQUFBQUFBQTJKbVlHRHdZQUFCMDZRMDA5VFU1RlNKTmZzV1NKNDRWWGZBeHZYeDVEc3lzaFhPNmllVGk0cWVYbTZaVVN2QzZ2djNST0hNRDBkVHBDVHUzekFfVUMtWVVIOHIyMzNlS29mQ0hZR3UwWG83aWswWGROWVVxdmotV0hfclhiU3VVYnJZM1VZQUFBQUFfXzgiLCJINHNJQUFBQUFBQUFBd0RTQWkzOUF3QUFBck1BQUFBQUFHRTVaalF6TkRsa2E0TWozbjdQejY0dmpPSWl5LVlNb3dhRDdlMWpqcDZJakE2SVFZMi14TFNOTWFSZWNrTTdzWEJKamR2SkpoeUF5TnZJVHQ5aUFFWHcybVVzM3lIbGc2UHNtSld1Mm1EU2UwbXlrYnQ0OGl1NTlkYTIxMVBNdkxyRzdxOV9teDlhYWI0SjdZbWlNODg2OTVUclk3WFY1Nmlsb3UwdnQ4VmdBMWptbkdYd0paa0ZDTXhYaUlhcGl5S01TVGlfa3BnREdQdlRlYUNNdE5GSXlIU0gwUTZ3bTFwRkJBYzRMQ1dqRThMeWtnc1ZtbEJxRG9aek1oZTVnY21sZHl0VW1FVFltakIyakVaUHdvd0M2NFRZb1JudDJOWkpmRDdDZXg1T3FqY1ptVU5tNjMtVlRYOFh0UEtza1BpSnpIb3kzcHF5dXVycnVrTndZenducHpwak51OEdKZXQ4V2RoMl85ckNoVnpPUnR4N1N5UXEyb2prUmJfWEphenFtTnEwMEVTcTNSZUVSX0pQZmhGOGg4bGlxcGVWeE1FSG5RUGFmMXp2N3FVQ3JzTWtrVjd3NU5sOURWYU9DMnNLV2Q1TDdBNDYxUlFRSjVUNU5MMGQ2UGZqVWV4dkZTR0RQdW5jcHAxeDA0TlBOM2ttTmdMSlF3eDZLZjRxLVBZbDVXWmFQUTlXU0NLNHBmeHY3ZTJRZEw0X1IwQ1c3NUdQRHh1bEZQZG1tcmRrc0k2RVhqUTFkQTdkZlNFUnJoZHdvOUhCN0xGMzRYSENnMWg3Z2I4UWVKdmhMTXRjUmtlUzVpQkctOGNfNkdCQU9YUDdQR2ptQ1NUZzV2WGVyX0Rud3FkektCOFdtY1p0OXFjMXZpU0ROV1JHZVN0bHc3d250UzFSSXlBN205cS01YU9FLUx0ODB3bE1HTkxOTi1TVFN3OWVDN2dxVmQtSUZZWlhYQ2NZcWNfcWc1dDhodFdSLVJ2cUJsX3Fjbkt2N2xhaHk5elRTaHJfX1BTRWJqdTg0SkhDV3I5SXhGd2lzYVd1eVZiMUp0ZUQzcDk0WnpWZDhnTEJQRGFRVUJMZHc1SVEzWkJIc3daTXExRjJqVGdEcF92RDJLQzZzVnd1dVhaa3RzYWlrc3pMZW5NcTFUVjRUMmF5QUdyVHB3UlUzMFMwc3hfQ3pCRVlLREV0b2s4eDI5TGlnUnlHMnVfZDVpOHRyVEJ1WTNjVFdzSXVIdzRibXNVV1lkTXNwblRMMXpwNE1LWUFBQURfX3ciXSwibmJmIjoxNzQ4ODc2OTU1LCJleHAiOjE3NTE0Njg5NTUsImlhdCI6MTc0ODg3Njk1NSwiaXNzIjoiaHR0cHM6Ly9hcGkuZGlnaXRhbHBhZ2VzLmNvbS5iciIsImF1ZCI6IkV1Q29ucXVpc3RvIn0.iTUfl6-mwLwFaxYYPf6PufRSYbSJlw3tKejmbc5G42g";
const url = `https://composer.euconquisto.com/#/embed/auth-with-token/pt_br/home/36c92686-c494-ec11-a22a-dc984041c95d/${token}`;
let browser, page;
try {
console.log('1️⃣ Launching browser...');
browser = await chromium.launch({
headless: false,
args: [
'--no-sandbox',
'--disable-dev-shm-usage'
]
});
const context = await browser.newContext({
viewport: { width: 1280, height: 720 }
});
page = await context.newPage();
console.log('2️⃣ Testing Strategy 1: Basic navigation with load event...');
await page.goto(url, { waitUntil: 'load', timeout: 30000 });
console.log(' ✅ Navigation complete (load)');
await page.waitForTimeout(3000);
let buttonCount = await page.locator('button').count();
console.log(` - Buttons found: ${buttonCount}`);
if (buttonCount === 0) {
console.log('3️⃣ Strategy 2: Reload and wait for networkidle...');
await page.reload({ waitUntil: 'networkidle', timeout: 30000 });
console.log(' ✅ Page reloaded (networkidle)');
await page.waitForTimeout(5000);
buttonCount = await page.locator('button').count();
console.log(` - Buttons found after reload: ${buttonCount}`);
}
if (buttonCount === 0) {
console.log('4️⃣ Strategy 3: Manual page refresh via JavaScript...');
await page.evaluate(() => window.location.reload());
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(5000);
buttonCount = await page.locator('button').count();
console.log(` - Buttons found after JS reload: ${buttonCount}`);
}
if (buttonCount === 0) {
console.log('5️⃣ Strategy 4: Navigate to base URL first, then to token URL...');
await page.goto('https://composer.euconquisto.com/', { waitUntil: 'load' });
console.log(' ✅ Navigated to base URL');
await page.waitForTimeout(2000);
await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 });
console.log(' ✅ Navigated to token URL');
await page.waitForTimeout(5000);
buttonCount = await page.locator('button').count();
console.log(` - Buttons found after base→token navigation: ${buttonCount}`);
}
if (buttonCount === 0) {
console.log('6️⃣ Strategy 5: Set URL via location.href...');
await page.evaluate((targetUrl) => {
window.location.href = targetUrl;
}, url);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(8000);
buttonCount = await page.locator('button').count();
console.log(` - Buttons found after location.href: ${buttonCount}`);
}
// Final analysis
const analysis = await page.evaluate(() => {
const body = document.body;
const buttons = document.querySelectorAll('button');
return {
title: document.title,
url: window.location.href,
bodyText: body.textContent?.slice(0, 300) || '',
buttonCount: buttons.length,
hasAngularApp: !!document.querySelector('[ng-app]') || !!window.angular,
hasReactApp: !!document.querySelector('[data-reactroot]') || !!window.React,
hasVueApp: !!document.querySelector('[data-v-]') || !!window.Vue,
bodyHTML: body.innerHTML.slice(0, 500)
};
});
console.log('📊 Final Analysis:');
console.log(` - Title: ${analysis.title}`);
console.log(` - Current URL: ${analysis.url}`);
console.log(` - Buttons: ${analysis.buttonCount}`);
console.log(` - Framework: Angular=${analysis.hasAngularApp}, React=${analysis.hasReactApp}, Vue=${analysis.hasVueApp}`);
console.log(` - Body text preview: ${analysis.bodyText}`);
console.log(` - Body HTML preview: ${analysis.bodyHTML}`);
// Check for NOVA COMPOSIÇÃO specifically
const novaButton = await page.locator('text=NOVA COMPOSIÇÃO').count();
console.log(` - NOVA COMPOSIÇÃO found: ${novaButton > 0 ? '✅ YES' : '❌ NO'}`);
// Screenshot
const timestamp = Date.now();
await page.screenshot({
path: `navigation-strategies-${timestamp}.png`,
fullPage: true
});
console.log(`📸 Screenshot: navigation-strategies-${timestamp}.png`);
console.log('\n🔍 Browser will stay open for 30 seconds for manual testing...');
console.log(' Try opening a new tab and navigating to the URL manually!');
await page.waitForTimeout(30000);
} catch (error) {
console.error('❌ Test failed:', error.message);
} finally {
if (browser) {
await browser.close();
console.log('🔒 Browser closed');
}
}
}
testNavigationStrategies().catch(console.error);