Catture pixel-stabili
Rendering deterministico con attesa del caricamento dei font, animazioni pinnate e mascheramento dei contenuti dinamici: i diff riflettono regressioni reali, non rumore.
ScanU è una piattaforma di test di regressione visiva e screenshot cross-browser pensata per team web professionali. Cattura rendering pixel-perfect di ogni pagina che conta, sui browser e sui viewport usati davvero dai vostri utenti, e fa emergere i cambiamenti di layout che i test unitari ed end-to-end si lasciano sfuggire in silenzio.
Cos’è ScanU
ScanU trasforma l’ultimo miglio della qualità di rilascio — esattamente ciò che i vostri utenti vedono — in un segnale su cui il team può agire. La piattaforma cattura screenshot pixel-stabili delle pagine che indicate, fissa una baseline esplicita e confronta ogni esecuzione successiva con quella baseline, sui browser e dispositivi che contano.
La maggior parte dei team usa già linter, type check, test unitari ed end-to-end. Tutto questo può restare verde mentre un bottone scivola di dodici pixel, una modale perde il padding, un menu si rompe su Safari o un breakpoint mobile riflua in silenzio l’intero hero. I test funzionali verificano il comportamento; non verificano come appare la pagina. È esattamente ciò a cui serve uno strumento di screenshot testing, ed è ciò che ScanU fa — senza cerimonie.
Sotto il cofano ScanU guida motori di rendering reali — Chromium, Gecko e WebKit — contro gli URL o le preview di componenti che indicate. Ogni esecuzione produce una cattura deterministica per ogni coppia (browser, viewport) configurata. La prima esecuzione accettata diventa la baseline. Da lì, ogni pull request, ogni deployment, ogni controllo pianificato è un diff rispetto a quella baseline: ogni regressione visiva viene esposta come una modifica da revisionare, come una code review evidenzia una riga cambiata.
L’intera pipeline di confronto gestisce i dettagli che rendono il diffing degli screenshot davvero utilizzabile in produzione: tolleranza all’anti-aliasing, stabilizzazione delle animazioni, caricamento dei font, mascheramento dei contenuti dinamici, cattura con scroll e soglie di diff percettive — in modo che un cambio di hinting sub-pixel non soffochi una vera regressione di layout.
ScanU è costruito per i team che trattano l’UI come un patto con i propri utenti. È uno strumento di test di regressione visiva, uno strumento di confronto di screenshot cross-browser e una superficie di revisione dei diff — in un’unica piattaforma — tra la vostra build e il release gate.
Rendering deterministico con attesa del caricamento dei font, animazioni pinnate e mascheramento dei contenuti dinamici: i diff riflettono regressioni reali, non rumore.
Chromium, Gecko e WebKit guidati in parallelo, sui viewport desktop, tablet e mobile che i vostri utenti usano davvero.
Baseline, cattura corrente e diff evidenziato affiancati. Accettare, rifiutare o aggiornare la baseline: sempre con un’azione esplicita, mai in sordina.
Gira nella pipeline esistente. Status check, commenti sulla pull request e link agli artefatti compaiono dove i vostri ingegneri già revisionano il codice.
Puntate ScanU su Storybook, su una sandbox di componenti o su URL in produzione. Modifiche ai token e refactoring dei componenti ricevono un audit visivo onesto prima del rilascio.
Screenshot e metadati sono conservati su infrastruttura europea, con un trattamento dei dati conforme al GDPR — adatto a team con requisiti stringenti di residenza dei dati.
Perché conta
Il costo di un bug visivo si misura raramente in tempo di sviluppo. Si misura nella fiducia di un utente che apre il vostro prodotto, vede qualcosa di sottilmente sbagliato e decide in silenzio che il team non si cura dei dettagli. È fiducia difficile da ricostruire, e quasi sempre è più economico prevenire il bug.
I test funzionali rispondono bene a una domanda: «il bottone fa la cosa giusta quando viene cliccato?». Su tutto ciò che succede prima del click restano muti — se il bottone ha il colore giusto, la dimensione giusta, la posizione giusta, se resta leggibile su uno schermo da 360 pixel o se è persino visibile dopo l’ultimo refactoring CSS. È in questo spazio che vivono la maggior parte degli incidenti del giorno di rilascio.
Le regressioni reali che vediamo, e per intercettare le quali ScanU è stato costruito, si raggruppano attorno a una manciata di cause ricorrenti:
gap di un container flex su un singolo breakpoint. Su desktop il layout sembra identico; su un tablet da 768 pixel due card ora si sovrappongono.Nessuna di queste modifiche fa fallire un’assertion. Tutte rompono l’esperienza di un utente. Il compito di ScanU è rendere questa seconda classe di rotture tanto facile da vedere, revisionare e bloccare quanto un test unitario rosso. Quando il diff compare sulla pull request, una designer può intervenire come un reviewer interviene sulla firma di una funzione — prima del merge, non dopo la produzione.
Questo passaggio — da «speriamo che qualcuno lo noti in staging» a «revisioniamo un cambiamento visivo come revisioniamo codice» — è il valore centrale di uno strumento di test di regressione visiva in una pipeline di rilascio moderna.
Test cross-browser
Il cross-browser testing non è una tassa di nostalgia ereditata da IE6. Anche i motori moderni — Chromium, Gecko e WebKit — divergono sui dettagli da cui i vostri layout silenziosamente dipendono, e un numero sorprendente di incidenti in produzione si riconduce a una differenza di rendering che nessuno ha controllato.
Quando una regressione compare solo in un motore, quasi sempre vale uno di tre scenari: è stata usata una feature che viene rilasciata più tardi in alcuni motori rispetto ad altri; un layout dipende da una metrica che varia per piattaforma (larghezza della scrollbar, baseline del font, algoritmo di smoothing); oppure un polyfill condizionato dallo user-agent si comporta in produzione in modo leggermente diverso rispetto alla macchina dello sviluppatore. Tutti e tre sono invisibili per una test suite agnostica rispetto al motore.
Esempi tipici osservati durante un audit cross-browser:
date, datetime-local, select — vengono renderizzati con chrome visibilmente diversi su WebKit rispetto a Chromium, spostando occasionalmente gli elementi adiacenti di qualche pixel.line-height bilanciata su Chromium può spingere un CTA oltre la fold su Gecko.gap nei container flex, aspect-ratio e le container query sono arrivati in momenti leggermente diversi tra i motori. Se la vostra build mira a una baseline più vecchia, i percorsi di fallback possono renderizzarsi diversamente rispetto al percorso primario.prefers-color-scheme, accent-color e forced-colors su Windows — si propagano nel DOM in modo diverso a seconda della piattaforma e sono facili da perdere in un ambiente di dev locale.ScanU cattura ogni pagina sui motori e sui viewport configurati in un’unica esecuzione, con fixture e timing hook identici, così i diff mostrati sono vere differenze di layout — non un effetto collaterale di eseguire ciascun browser in un harness diverso. Potete vedere tutte le capacità cross-browser sulla pagina di prodotto: la matrice che configurate è la matrice catturata a ogni esecuzione.
Per i team che rilasciano design system, o per qualunque prodotto la cui identità visiva faccia parte del marchio, questa matrice non è un optional. È l’unico modo per sapere che ciò che il vostro cliente vede su Safari è ciò che avete approvato su Chrome.
| Browser | Viewport | Stato |
|---|---|---|
| Chromium 124 | 1440 × 900 | Corrisponde alla baseline |
| Firefox 126 | 1440 × 900 | Corrisponde alla baseline |
| WebKit (Safari 17) | 1440 × 900 | Diff visivo · da revisionare |
| Chromium 124 | 768 × 1024 | Corrisponde alla baseline |
| WebKit (Safari 17) | 768 × 1024 | Layout shift rilevato |
| Chromium 124 | 390 × 844 | Nuova baseline in attesa |
Come funziona il confronto
Uno strumento di diff visivo è utile solo quanto il rapporto segnale-rumore dei diff che produce. La pipeline di cattura di ScanU è progettata in modo che tra due esecuzioni cambi solo ciò che avete davvero modificato — non la scenografia di font, animazioni, timestamp o slot pubblicitari intorno.
Ogni esecuzione è una pipeline in tre passi. Prima ScanU naviga in ciascun motore fino alla pagina o al componente in test, attende un insieme configurato di segnali di readiness — font caricati, immagini decodificate, rete silenziosa, un attributo data-ready o una probe JavaScript personalizzata — e fissa tutte le animazioni CSS al loro frame finale. Poi cattura la pagina su ogni viewport configurato nella stessa esecuzione, con scroll-stitching sulle pagine lunghe così da ottenere l’artefatto completo e non solo la porzione visibile. Infine confronta la cattura con la baseline accettata e produce un risultato per ciascuna coppia (browser, viewport): identica, entro tolleranza, o significativamente diversa.
Il confronto stesso non è un diff di pixel ingenuo. ScanU applica un modello percettivo che comprende anti-aliasing, rendering sub-pixel e variazioni di spazio colore, così una peculiarità di kerning su WebKit non passa per bug. Supporta inoltre maschere esplicite per le zone che cambiano a ogni caricamento — dati in tempo reale, timestamp relativi, contenuti randomizzati, carousel — in modo che quelle aree contribuiscano zero rumore al diff.
Quando compare un vero cambiamento, la piattaforma mostra tre pannelli sincronizzati: la baseline, la cattura corrente e un overlay di diff che evidenzia esattamente ciò che si è spostato. Per ogni modifica viene registrata una decisione revisionabile — accettare, rifiutare o aggiornare la baseline — e questa decisione entra nella storia del progetto. Nessuna deriva silenziosa e nessuna accettazione automatica: la baseline si muove solo quando una persona autorizzata lo dichiara.
La stessa pipeline può essere guidata da tre punti di ingresso: contro URL in produzione (production, staging, preview di PR), contro un sito statico o un bundle di asset buildato, o contro preview di componenti in una sandbox in stile Storybook. La maggior parte dei team usa la prima via per i release gate, la seconda per gli artefatti di deployment e la terza per il lavoro sul design system — tutte e tre alimentano lo stesso store di baseline.
L’ultimo rendering accettato per questa pagina, browser e viewport. Congelato finché un revisore non lo aggiorna esplicitamente.
La cattura di questa esecuzione. Stesse fixture, stessi timing hook, stesso viewport — è cambiato solo il codice sotto test.
Le regioni evidenziate in ambra mostrano dove il rendering corrente diverge dalla baseline oltre la tolleranza configurata.
Per chi è ScanU
ScanU è pensato per i team il cui lavoro viene giudicato da ciò che l’utente vede. È un gruppo più ampio di quanto sembri — non solo designer e sviluppatori frontend, ma chiunque le cui decisioni di rilascio dipendano dal fatto che una UI sia corretta su un determinato browser, a un determinato viewport, in un determinato giorno.
Sviluppatori frontend e full-stack usano ScanU come ultima tappa di una pipeline di pull request: la build è verde, i test unitari passano, la suite end-to-end è soddisfatta, e poi un diff visivo conferma che la modifica corrisponde a quanto previsto dalla designer, oppure fa emergere una regressione che nessuno avrebbe colto rileggendo un patch. Il risultato è meno tempo passato a spegnere incendi post-deploy e più tempo sul lavoro che fa davvero avanzare il prodotto.
Ingegneri QA ottengono un livello di test che scala senza riscrivere selettori. Aggiungere una nuova pagina alla suite visiva è un URL e una baseline — non una settimana di XPath fragili. Il livello che intercetta le regressioni UI diventa parte di prima classe della piramide dei test, invece di un messaggio Slack di un utente a cose fatte.
Team design system e team di piattaforma usano ScanU contro ogni sandbox di componente della loro libreria. Quando cambia un token, ogni componente che vi dipende riceve automaticamente un audit visivo. Quando un componente viene refactorato, i consumatori a valle ricevono un diff che possono revisionare prima che la nuova versione venga pubblicata. È così che un design system evita di accumulare regressioni silenziose per anni.
Product e engineering leader usano la superficie di revisione come evidenza. Le release note possono includere un link al diff visivo accettato per ciascun rilascio. I post-mortem possono indicare se una regressione è stata intercettata, mancata o esplicitamente accettata. Nel tempo la piattaforma diventa la registrazione di come l’UI si è evoluta e di chi ha approvato ogni passo.
Casi d’uso
La stessa piattaforma serve workflow molto diversi. Il filo comune è che ciascuno di questi team rilascia UI su una cadenza che ai loro clienti interessa, e ciascuno ha bisogno di capire — a colpo d’occhio — se l’UI ha ancora l’aspetto che dovrebbe.
Qualunque sia la forma del team, ScanU viene tipicamente adottato per una di cinque ragioni: un recente incidente in produzione che una regressione visiva avrebbe intercettato; una migrazione di design system il cui blast radius è impossibile da revisionare a mano; un workflow CI/CD che ha bisogno di un release gate più ricco di «test passati»; un deliverable orientato al cliente che richiede prove prima/dopo; o una postura di compliance che predilige strumenti di test hosted in UE. Una integrazione CI/CD condivisa sta dietro a tutte e cinque — la stessa pipeline fa il lavoro sia che venga attivata da una PR, da un merge o da una pianificazione notturna.
Consegnate ai clienti un delta visivo settimanale per sito. Prove prima/dopo a ogni sprint, su ogni browser previsto da contratto, in un solo report.
Aggiungete un livello visivo alla piramide dei test. Le nuove pagine entrano nella suite con URL e baseline — niente selettori fragili, niente script di screenshot flakey da manutenere.
I diff degli screenshot compaiono in linea sulle pull request. Le regressioni di layout vengono intercettate in revisione, non in produzione, e non in un thread Slack di un cliente.
Muoversi in fretta senza rompere l’home. Una rete di sicurezza deterministica che tiene il sito marketing pixel-stabile attraverso redesign, A/B test e migrazioni di token.
Copertura visiva su ogni sandbox di componente. Cambi di token, swap di tema e refactoring di componenti ricevono un audit automatico prima che la libreria pubblichi.
Validate i breakpoint mobile, tablet e desktop nella stessa esecuzione. Il responsive testing smette di essere una fatica di cattura e diventa un passo di revisione.
CI/CD e fiducia al rilascio
La fiducia al rilascio non è una sensazione. È una pipeline che dice la verità su ciò che sta per andare in produzione — incluse le parti su cui il vostro test runner non ha opinioni. ScanU si inserisce in quella pipeline come status check, commento sulla PR e artefatto archiviato, linkabile da qualunque post-mortem.
Il modello di integrazione è deliberatamente sobrio: il passo di cattura di ScanU gira nello stesso job che già esegue i vostri test; riporta un pass, un review-needed o un fail sulla PR; e quello stato viene trattato come qualunque altro check obbligatorio. I team sanno già leggere il verde, il giallo e il rosso dalla pipeline — un check di regressione visiva inserito in quel ritmo aggiunge una nuova dimensione di sicurezza senza richiedere un nuovo modello mentale.
Sotto il cofano ScanU è progettato per le realtà della CI/CD moderna:
La guida all’integrazione CI/CD passo passo descrive il cablaggio specifico per GitHub Actions, GitLab CI, Bitbucket Pipelines e runner self-hosted. Il caso comune è un singolo job aggiuntivo; il caso più avanzato è una matrice di ambienti che promuove una baseline in avanti attraverso un rilascio a stadi.
GDPR · Hosting UE · Privacy
Gli artefatti di test sono dati. Gli screenshot possono catturare incidentalmente dati personali finiti su una pagina — un nome nella navigation bar, un’email nel menu del profilo, un riferimento d’ordine su una schermata di conferma. Una piattaforma di test visivo responsabile tratta quegli artefatti con la stessa cura dei dati di produzione che riflettono.
ScanU è costruito e ospitato nell’Unione Europea, con storage ed elaborazione su infrastruttura operata in UE. Per i team con impegni di residenza dei dati — settori regolati, acquirenti pubblici, clienti B2B sensibili alla privacy — spesso è un requisito di procurement, non una preferenza. ScanU è progettato per soddisfarlo senza compromessi sulle capacità di prodotto.
Da questa postura discendono alcune scelte di design deliberate:
Per la postura privacy completa — sub-processor, hosting regionale, DPA, finestre di retention — consultate la documentazione GDPR e trattamento dati. Per la maggior parte dei team conta la versione sintetica: i vostri screenshot restano in UE, e la piattaforma è ingegnerizzata per tenerli lì.
La differenza
Il visual testing è una categoria affollata. Buona parte di ciò che differenzia ScanU sono le cose che rifiuta di fare — le scorciatoie che non prende, il rumore che non gira alla vostra coda di revisione e le opinioni su come debba essere revisionato un diff.
Gli strumenti generici di screenshot tendono a essere distribuiti come una libreria da incollare al vostro test runner, poi vi lasciano combattere con timing, font, animazioni e la domanda eterna se uno shift di un pixel sia un bug vero o un artefatto di arrotondamento. ScanU prende una posizione più netta: se la piattaforma non riesce a produrre una cattura deterministica, è un problema della piattaforma — non vostro. Per questo readiness signal, font loading, animation pinning, scroll stitching, diff percettivo e regioni mascherate sono integrati, non aggiunti a posteriori.
Il pricing segue la stessa logica. Per un team ragionevole — qualche decina di pagine, tre motori, tre viewport, una pipeline — il costo della copertura visiva non dovrebbe essere una voce da difendere in sede di budget. La pagina di pricing è scritta in numeri chiari: cosa ottenete a ciascun livello, cosa conta come run e qual è il tetto. Nessun preventivo su misura per i team che vogliono solo rilasciare l’UI che hanno progettato.
Stabilizzazione, readiness dei font, animation pinning e scroll stitching sono feature di piattaforma — non snippet da manutenere nel vostro repo.
Il motore di diff comprende anti-aliasing e rendering sub-pixel, così micro-spostamenti invisibili non soffocano le regressioni che contano davvero.
Le baseline si muovono solo quando una persona autorizzata accetta il cambiamento. Ogni aggiornamento è auditabile. Nessuna deriva silenziosa.
Screenshot, metadati e storia di revisione vivono su infrastruttura UE. Nessun opt-in necessario per i team tenuti a quella postura.
Cosa intercetta ScanU
La maggior parte dei bug che una piattaforma di regressione visiva intercetta non sono esotici. Sono le piccole, ordinarie, facili da perdere rotture che passano davanti ai revisori perché nessuna assertion è lì a cercarle. Ecco un campionario delle categorie che ScanU è progettato per far emergere.
I bug visivi si raccolgono attorno a una manciata di pattern ricorrenti. Ciascuno sembra banale in isolamento; ciascuno può finire in produzione senza un solo test rosso. Tutti emergono come diff alla prossima esecuzione di ScanU, prima che la PR venga mergiata.
backdrop-filter. Su Safari una barra di navigazione si rende all’improvviso opaca, dove prima sfumava.text-wrap: balance è pulito su Chrome ma resta non bilanciato su motori che non lo hanno ancora rilasciato. Senza un controllo cross-browser è invisibile sulla macchina dello sviluppatore.La panoramica delle funzionalità approfondisce le primitive di rilevamento — tolleranze percettive, regioni mascherate, cattura con scroll, branching delle baseline — e mostra come ciascuna si mappi a una delle categorie sopra. Per la maggior parte dei team la versione breve suona così: se cambia qualcosa visivamente, ScanU lo nota; se è atteso, lo accettate con un clic; se non lo è, lo avete intercettato prima di chiunque altro.
FAQ
Prossimi passi
Il modo più rapido per decidere se il test di regressione visiva appartenga alla vostra pipeline è eseguirlo una volta contro un progetto che già rilasciate. ScanU è gratis per iniziare, si collega in pochi minuti a un job CI esistente e produce il suo primo diff al commit successivo.
La maggior parte dei team inizia con una singola pagina ad alto traffico su tre browser e tre viewport. È sufficiente per vedere la piattaforma all’opera, ed è sufficiente per intercettare la prossima regressione reale che la vostra test suite attuale avrebbe perso.
Da lì, lo scope cresce con la fiducia del team: più pagine, più breakpoint, copertura a livello di componente sul design system, uno status check obbligatorio su ogni pull request. Nessuna call da prenotare, nessun onboarding su misura, nessun impegno minimo.