37 lines
3.2 KiB
JavaScript
37 lines
3.2 KiB
JavaScript
import fs from 'node:fs';
|
|
import { createRequire } from 'node:module';
|
|
|
|
const require = createRequire(import.meta.url);
|
|
const { chromium } = require('C:/Users/macbook/AppData/Local/Temp/investmoz-visual-qa-tools-20261004/node_modules/playwright');
|
|
const base = process.argv[2] ?? 'http://127.0.0.1:8000/documentos';
|
|
const browser = await chromium.launch({ headless: true });
|
|
const evidence = { base, testedAt: new Date().toISOString(), targetDatabase: 'investemoz (confirmed by read-only Laravel connection query)', viewports: [], errors: [] };
|
|
|
|
for (const viewport of [{ name: 'desktop', width: 1440, height: 1000 }, { name: 'mobile', width: 390, height: 844 }]) {
|
|
const page = await browser.newPage({ viewport: { width: viewport.width, height: viewport.height } });
|
|
page.on('pageerror', (error) => evidence.errors.push(error.message));
|
|
page.on('console', (message) => { if (message.type() === 'error') evidence.errors.push(message.text()); });
|
|
const response = await page.goto(base, { waitUntil: 'networkidle' });
|
|
const heading = await page.getByRole('heading', { name: 'Documentos e Formulários' }).count();
|
|
const text = await page.locator('body').innerText();
|
|
const overflow = await page.evaluate(() => ({ viewport: innerWidth, document: document.documentElement.scrollWidth, body: document.body.scrollWidth }));
|
|
await page.keyboard.press('Tab');
|
|
const focus = await page.evaluate(() => ({ tag: document.activeElement?.tagName, label: document.activeElement?.getAttribute('aria-label'), text: document.activeElement?.textContent?.trim().slice(0, 80) }));
|
|
const screenshot = `docs/investmoz/document-library-completion-${viewport.name}-2026-10-06.png`;
|
|
await page.screenshot({ path: screenshot, fullPage: true });
|
|
await page.getByRole('textbox', { name: 'Pesquisar' }).fill('__sem_correspondencia_qa__');
|
|
await page.getByRole('button', { name: 'Pesquisar' }).click();
|
|
await page.waitForURL((url) => url.searchParams.get('q') === '__sem_correspondencia_qa__');
|
|
const searchUrl = page.url();
|
|
const noResults = await page.getByText(/Não existem documentos publicados para esta pesquisa/).count();
|
|
const searchOverflow = await page.evaluate(() => document.documentElement.scrollWidth === innerWidth);
|
|
evidence.viewports.push({ ...viewport, status: response?.status(), heading, publicResultsText: text.match(/\d+ documentos correspondem aos filtros activos/)?.[0] ?? null, emptyState: /Não existem documentos publicados para esta pesquisa/.test(text), overflow, firstKeyboardFocus: focus, noMatchSearch: { url: searchUrl, emptyState: noResults === 1, noHorizontalOverflow: searchOverflow }, screenshot });
|
|
if (/SQLSTATE|select \* from|Database:|Host: 127\.0\.0\.1/.test(text)) evidence.errors.push(`${viewport.name}: página contém detalhe interno de erro`);
|
|
await page.close();
|
|
}
|
|
|
|
await browser.close();
|
|
fs.writeFileSync('docs/investmoz/document-library-completion-browser-2026-10-06.json', JSON.stringify(evidence, null, 2) + '\n');
|
|
console.log(JSON.stringify(evidence, null, 2));
|
|
if (evidence.errors.length || evidence.viewports.some((item) => item.status !== 200 || item.heading !== 1 || item.overflow.document !== item.width || !item.noMatchSearch.emptyState || !item.noMatchSearch.noHorizontalOverflow)) process.exit(1);
|