← back to Nationalrealestate
cap_mobile.cjs
35 lines
const { chromium, devices } = require('playwright');
(async () => {
const url = process.argv[2] || 'https://corkwallcovering.com/';
const q = process.argv[3] || 'grasscloth';
const out = process.argv[4] || '/tmp/search-mobile.png';
const b = await chromium.launch();
const ctx = await b.newContext({ ...devices['iPhone 13'] });
const page = await ctx.newPage();
const errs = [];
page.on('console', m => { if (m.type()==='error') errs.push(m.text().slice(0,80)); });
page.on('pageerror', e => errs.push('PAGEERR '+e.message.slice(0,80)));
const resp502 = [];
page.on('response', r => { if (r.status()>=500 || (r.status()===404 && /api|search|products/i.test(r.url()))) resp502.push(r.status()+' '+r.url().slice(0,70)); });
await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 });
const sel = '#grid a.card, #grid .card, [data-card]';
const t = async () => page.$$eval(sel, els => els.slice(0,4).map(e=>(e.textContent||'').replace(/\s+/g,' ').trim().slice(0,32)));
const searchVisible = await page.isVisible('#searchInput').catch(()=>false);
const before = await t().catch(()=>[]);
let typed = false;
try { await page.fill('#searchInput', q, { timeout: 4000 }); typed = true; } catch(e){ errs.push('FILL FAIL '+e.message.slice(0,60)); }
await page.waitForTimeout(1600);
const after = await t().catch(()=>[]);
const stat = await page.$eval('#statLine', el=>el.textContent).catch(()=> '(no statLine)');
console.log('URL', url, '| MOBILE');
console.log('#searchInput visible:', searchVisible, '| typed:', typed);
console.log('BEFORE:', JSON.stringify(before));
console.log('AFTER :', JSON.stringify(after));
console.log('statLine:', stat.trim(), '| grid changed:', JSON.stringify(before)!==JSON.stringify(after));
console.log('5xx/api-404 responses:', resp502.slice(0,6));
console.log('console errors:', errs.slice(0,6));
await page.screenshot({ path: out, fullPage: false });
console.log('shot', out);
await b.close();
})().catch(e => { console.error('ERR', e.message); process.exit(1); });