వెబ్ ఆధారిత డిజైన్ టూల్‌పై AI-ఆధారిత QA రన్ "అన్ని ఫీచర్లు పనిచేస్తున్నాయి, పాస్" అని నివేదించింది, అయినప్పటికీ కాన్వాస్ (canvas) లో ఏమీ కనిపించలేదు. ఈ తప్పుడు పాస్ (false pass) మోడల్ యొక్క రీజనింగ్‌లో వచ్చిన లోపం కాదు; బ్రౌజర్ దాగి ఉన్న ట్యాబ్‌లను (hidden tabs) ఎలా హ్యాండిల్ చేస్తుంది మరియు టెస్ట్ స్క్రిప్ట్ విజువల్ అవుట్‌పుట్‌కు బదులుగా "హెల్త్" (health) ను ఎలా కొలుస్తుంది అనే దాని వల్ల కలిగిన సైడ్-ఎఫెక్ట్.

AI QA ఏజెంట్లు ఖాళీ కాన్వాస్‌ను ఎందుకు గుర్తించలేకపోవచ్చు

అవి JavaScriptను అమలు చేస్తాయి, స్క్రీన్‌షాట్‌లను క్యాప్చర్ చేస్తాయి మరియు ఫీచర్ సరిగ్గా పనిచేసిందో లేదో మోడల్ ద్వారా నిర్ధారిస్తాయి. వాస్తవానికి, UI నిజానికి ఖాళీగా ఉన్నప్పుడు రెండు సాంకేతిక లోపాలు (blind spots) పదేపదే పాస్ రిపోర్టులను ఇస్తాయి.

Hidden-tab throttling వివరణ

మెయిన్ విండోను ఇతర పనుల కోసం ఖాళీగా ఉంచడానికి Chrome MCP తరచుగా బ్యాక్‌గ్రౌండ్ ట్యాబ్‌లలో టెస్ట్‌లను రన్ చేస్తుంది. ఒక ట్యాబ్ యొక్క document.visibilityState hidden గా ఉన్నప్పుడు, బ్రౌజర్ రెండరింగ్ పైప్‌లైన్‌ను త్రోటిల్ (throttle) చేస్తుంది:

  • JavaScript రన్ అవుతూనే ఉంటుంది, కాబట్టి రన్‌టైమ్ ఎర్రర్స్ (runtime errors) కనిపించవు.
  • requestAnimationFrame కాల్‌బ్యాక్‌లు ఆగిపోతాయి, దీనివల్ల యానిమేషన్ ఫ్రేమ్ కౌంట్ సున్నా వద్ద ఉంటుంది.
  • టైమర్‌లు చాలా తక్కువ సార్లు రన్ అవుతాయి; 33 ms ఇంటర్వల్స్ ఆశించిన టెస్ట్ కేవలం నాలుగు మాత్రమే గమనించింది.

AI ఏజెంట్ క్లీన్ JS ఫలితాలను మరియు ఒక స్క్రీన్‌షాట్‌ను చూసి, యానిమేషన్ పనిచేసిందని అనుకుంటుంది. రెండరింగ్ లూప్ ఎప్పుడూ పిక్సెల్‌లను ఉత్పత్తి చేయనందున, విజువల్ లోపం (visual defect) దాగి ఉంటుంది.

Hidden-tab సమస్యల పరిష్కారాలు

  • ఏదైనా కాన్వాస్, యానిమేషన్ లేదా గ్రాఫిక్స్ వెరిఫికేషన్ కోసం టెస్ట్ ట్యాబ్‌ను విజిబుల్‌గా (visible) ఉంచండి.
  • ట్యాబ్ ఫ్రంట్‌గ్రౌండ్‌లో ఉన్న తర్వాత మాత్రమే ఇంటరాక్షన్‌లను ట్రిగ్గర్ చేయండి.
  • స్క్రీన్‌షాట్‌ను క్యాప్చర్ చేసే ముందు చిన్న విరామం (కొన్ని సెకన్లు) ఇవ్వండి, తద్వారా ఫ్రేమ్ బఫర్ నిండినట్లు నిర్ధారించుకోవచ్చు.
  • ఒకవేళ దాగి ఉన్న ట్యాబ్‌ను తప్పనిసరిగా ఉపయోగించాల్సి వస్తే, రిపోర్ట్‌కు ముందు “rendering not visually observed” వంటి డిస్క్లైమర్‌ను జోడించండి.

Code health vs. feature behavior

చాలా AI QA స్క్రిప్ట్‌లు “code health” ను అంచనా వేస్తాయి: క్లిక్ హ్యాండ్లర్లు సరిగ్గా ఉన్నాయా, ఎటువంటి JavaScript ఎక్సెప్షన్లు రావడం లేదూ మరియు అవసరమైన లైబ్రరీలు లోడ్ అయ్యాయా అని అవి నిర్ధారిస్తాయి. ఆ సిగ్నల్స్ కోడ్ రన్ అయిందని నిరూపిస్తాయి కానీ, UI ఉద్దేశించినట్లుగా మారిందని కాదు. ఒక కాన్వాస్ ఎలిమెంట్ సృష్టించబడవచ్చు, డ్రాయింగ్ రూటీన్ పిలవబడవచ్చు, కానీ డ్రాయింగ్ కమాండ్‌లు జీరో-సైజ్ బఫర్ లేదా ఖాళీ అసెట్‌ను లక్ష్యంగా చేసుకుంటే ఏమీ రెండర్ కాదు.

ఈ తేడా చాలా ముఖ్యం, ఎందుకంటే హెల్తీ కోడ్ పాత్ (healthy code path) విజువల్ లోపాన్ని దాచిపెట్టవచ్చు.

ప్రవర్తన తనిఖీలను (behavior checks) జోడించడం

  1. డైనమిక్ ఎలిమెంట్లను గుర్తించండి – కాన్వాస్ ట్యాగ్‌లు, ఫైల్-ఇన్‌పుట్ ఫీల్డ్‌లు, డౌన్‌లోడ్ బటన్‌లు మరియు యానిమేషన్ లూప్‌ల కోసం సోర్స్ స్కాన్ చేయండి.
  2. గమనించదగిన ఫలితాలను నిర్వచించండి – కాన్వాస్ కోసం, బిట్‌మ్యాప్ ఖాళీగా లేదని పిక్సెల్-లెవల్ చెక్ చేయండి. ఫైల్ ఇన్‌పుట్ కోసం, ప్రివ్యూ ఇమేజ్ కనిపిస్తుందో లేదో వెరిఫై చేయండి. డౌన్‌లోడ్ కోసం, ఫైల్‌సైస్టమ్‌లో ఫైల్ సృష్టించబడిందని నిర్ధారించుకోండి. యానిమేషన్ల కోసం, ట్రాక్ చేయబడిన ప్రాపర్టీ కాలక్రమేణా మారుతుందని అస్సర్ట్ (assert) చేయండి.
  3. కవరేజీని రిపోర్ట్ చేయండి – ప్రతి ఫీచర్, కోడ్-హెల్త్ స్టేటస్ మరియు బిహేవియర్ వెరిఫికేషన్ ఫలితాన్ని జాబితా చేస్తూ QA అవుట్‌పుట్‌కు ఒక టేబుల్‌ను జత చేయండి. బిహేవియర్ చెక్ లేని దేనినైనా “pass” అని కాకుండా “unverified” అని ఉంచండి.

ఈ నియమాన్ని వర్తింపజేయడం వల్ల రచయిత యొక్క టెస్ట్ సూట్‌లో ఫాల్స్ పాజిటివ్‌లు (false positives) గణనీయంగా తగ్గాయి మరియు స్టైల్‌షీట్ ఒక రంగును ప్రకటించినప్పటికీ రెండర్ అయిన పిక్సెల్ వేరుగా ఉన్న CSS mismatchesలను కూడా బయటపెట్టింది.

నమ్మకమైన విజువల్ టెస్టింగ్ కోసం ఆచరణాత్మక దశలు

  • ఫీచర్‌లో రెండరింగ్ ఉన్నప్పుడు ఎల్లప్పుడూ టెస్ట్‌లను విజిబుల్ ట్యాబ్‌లో రన్ చేయండి.
  • UI స్థిరపడే వరకు వేచి ఉండండి; కొన్ని సెకన్ల స్థిరమైన ఆలస్యం తరచుగా సరిపోతుంది, కానీ getImageData ఉపయోగించి ఖాళీ కాన కాన్వాస్ కోసం పోల్ (poll) చేయడం మరింత పటిష్టమైన పద్ధతి.
  • టెస్ట్ స్క్రిప్ట్‌లో code-health అస్సెర్షన్లను విజువల్ అస్సెర్షన్ల నుండి వేరు చేయండి; AI మోడల్‌ను ప్రతిదాన్ని స్వతంత్రంగా అంచనా వేయనివ్వండి.
  • డయాగ్నోస్టిక్ అవుట్‌పుట్‌లో భాగంగా విజిబిలిటీ స్టేట్ మరియు ఫ్రేమ్ కౌంటర్లను (requestAnimationFrame కాల్స్) లాగ్ చేయండి.
  • తప్పనిసరిగా దాగి ఉన్న ట్యాబ్‌లలో రన్ చేయాల్సి వస్తే, వాటిని స్పష్టమైన హెచ్చరికలతో డాక్యుమెంట్ చేయండి, తద్వారా రివ్యూయర్‌లు ఆ పరిమితిని అర్థం చేసుకుంటారు.

తదుపరి ఏమి గమనించాలి

AI-సహాయక QA టూల్స్ పెరుగుతున్న కొద్దీ, డెవలపర్లు వాటిని అసిస్టెంట్‌లుగా చూడాలి తప్ప, నిర్ణయాధికారులుగా (arbiters) కాదు. కోడ్-హెల్త్ మెట్రిక్స్ ఎల్లప్పుడూ యూజర్-ఫేసింగ్ బిహేవియర్‌కు అసంపూర్ణ ప్రొక్సీలుగానే ఉంటాయి. దీని సారాంశం సరళమైనది: AI మోడల్ అది చూసిన దానిని మాత్రమే రిపోర్ట్ చేయగలదు. ట్యాబ్ దాగి ఉన్నందున బ్రౌజర్ ఎప్పుడూ పెయింట్ చేయకపోయినా, లేదా టెస్ట్ స్క్రిప్ట్ "స్క్రీన్‌పై ఏదైనా కనిపించిందా?" అని అడగకపోయినా, మోడల్ సంతోషంగా విజయాన్ని ప్రకటిస్తుంది. విజిబిలిటీ అవసరాన్ని మరియు బిహేవియర్-వెరిఫికేషన్ దశను జోడించడం వల్ల ఒక పైపైన కనిపించే "pass" రిపోర్ట్ నమ్మదగిన ఫలితంగా మారుతుంది.