← 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); });