← back to Handbag Auth Nextjs
quick-mobile-test.js
141 lines
const puppeteer = require('puppeteer');
const SITE_URL = 'http://45.61.58.125:7991';
async function quickMobileTest() {
console.log('Quick Mobile Test - Direct Analysis\n');
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
// Set iPhone viewport
await page.setViewport({
width: 375,
height: 667,
isMobile: true,
hasTouch: true
});
const results = {};
// Test each page
const pages = ['/', '/camera', '/price-tracker'];
for (const path of pages) {
console.log(`Testing ${path}...`);
try {
await page.goto(`${SITE_URL}${path}`, {
waitUntil: 'networkidle2',
timeout: 5000
}).catch(() => {
// Continue even if networkidle times out
return page.goto(`${SITE_URL}${path}`, {
waitUntil: 'domcontentloaded'
});
});
// Wait using setTimeout instead of waitForTimeout
await new Promise(resolve => setTimeout(resolve, 1000));
const analysis = await page.evaluate(() => {
const results = {
issues: [],
good: []
};
// Check viewport
const viewport = document.querySelector('meta[name="viewport"]');
if (viewport) {
results.good.push('Has viewport meta tag');
}
// Check horizontal scroll
if (document.body.scrollWidth > window.innerWidth) {
results.issues.push(`Horizontal overflow: ${document.body.scrollWidth}px > ${window.innerWidth}px`);
} else {
results.good.push('No horizontal overflow');
}
// Check inputs
const inputs = document.querySelectorAll('input:not([type="hidden"]):not([type="checkbox"]), textarea, select');
let smallInputs = 0;
inputs.forEach(input => {
const fontSize = parseInt(window.getComputedStyle(input).fontSize);
if (fontSize < 16) smallInputs++;
});
if (smallInputs > 0) {
results.issues.push(`${smallInputs} inputs with font < 16px (iOS zoom issue)`);
} else if (inputs.length > 0) {
results.good.push(`All ${inputs.length} inputs have font-size ≥ 16px`);
}
// Check navigation
const nav = document.querySelector('nav');
if (nav) {
const display = window.getComputedStyle(nav).display;
if (display === 'none') {
results.good.push('Navigation hidden on mobile (expected)');
}
}
return results;
});
results[path] = analysis;
// Take screenshot
await page.screenshot({
path: `mobile-screenshots/quick-${path.replace(/\//g, '') || 'home'}-375px.png`
});
} catch (error) {
console.log(` Error on ${path}: ${error.message}`);
results[path] = { error: error.message };
}
}
await browser.close();
// Print results
console.log('\n=== MOBILE TEST RESULTS ===\n');
let totalIssues = 0;
for (const [path, result] of Object.entries(results)) {
console.log(`${path}:`);
if (result.error) {
console.log(` ❌ Error: ${result.error}`);
} else {
if (result.issues && result.issues.length > 0) {
totalIssues += result.issues.length;
result.issues.forEach(issue => console.log(` ❌ ${issue}`));
}
if (result.good && result.good.length > 0) {
result.good.forEach(good => console.log(` ✅ ${good}`));
}
}
console.log('');
}
console.log('=== OVERALL ASSESSMENT ===\n');
if (totalIssues === 0) {
console.log('✅ MOBILE-FRIENDLY: No critical issues detected!');
} else if (totalIssues <= 2) {
console.log('⚠️ MOSTLY MOBILE-FRIENDLY: Minor issues found');
} else {
console.log('❌ NEEDS IMPROVEMENT: Multiple mobile issues detected');
}
console.log(`\nTotal Issues: ${totalIssues}`);
console.log('\nScreenshots saved in mobile-screenshots/');
}
quickMobileTest().catch(console.error);