Larian QA dipacu AI pada alat reka bentuk berasaskan web melaporkan “Semua ciri berfungsi, lulus,” namun kanvas tidak memaparkan apa-apa. Kelulusan palsu tersebut bukanlah ralat dalam penaakulan model; ia adalah kesan sampingan daripada cara pelayar mengendalikan tab tersembunyi dan cara skrip ujian mengukur “kesihatan” dan bukannya output visual.
Mengapa ejen QA AI boleh terlepas pandang kanvas kosong
Mereka melaksanakan JavaScript, menangkap tangkapan skrin, dan membiarkan model membuat inferens sama ada sesuatu ciri berfungsi dengan betul. Dalam praktiknya, dua titik buta teknikal berulang kali menghasilkan status lulus walaupun UI sebenarnya kosong.
Penjelasan tentang pengehadan (throttling) tab tersembunyi
Chrome MCP sering menjalankan ujian dalam tab latar belakang untuk memastikan tetingkap utama bebas untuk kerja lain. Apabila document.visibilityState sesuatu tab adalah hidden, pelayar akan mengehadkan (throttle) saluran paip rendering:
- JavaScript terus berjalan, jadi tiada ralat masa larian (runtime errors) muncul.
- Panggilan
requestAnimationFrameberhenti berfungsi, menyebabkan bilangan bingkai animasi kekal pada sifar. - Pemasa (timers) berfungsi jauh lebih jarang; ujian yang menjangkakan selang 33 ms hanya memerhatikan empat sahaja.
Ejen AI melihat hasil JS yang bersih dan tangkapan skrin, lalu menganggap animasi telah berfungsi. Oleh kerana gelung rendering tidak pernah menghasilkan piksel, kecacatan visual tersebut kekal tersembunyi.
Penyelesaian untuk isu tab tersembunyi
- Pastikan tab ujian kelihatan untuk sebarang pengesahan kanvas, animasi, atau grafik.
- Cetuskan interaksi hanya selepas tab berada di hadapan (foreground).
- Masukkan tempoh menunggu yang singkat (beberapa saat) sebelum menangkap tangkapan skrin, bagi memastikan buffer bingkai telah diisi.
- Jika tab tersembunyi mesti digunakan, sertakan penafian dalam laporan seperti “rendering tidak diperhatikan secara visual.”
Kesihatan kod vs. tingkah laku ciri
Kebanyakan skrip QA AI menilai “kesihatan kod”: mereka mengesahkan bahawa pengendali klik telah disambungkan, tiada pengecualian JavaScript yang berlaku, dan perpustakaan yang diperlukan telah dimuatkan. Isyarat tersebut membuktikan kod telah berjalan, bukannya UI berubah seperti yang dimaksudkan. Elemen kanvas boleh dicipta, rutin lukisan dipanggil, namun tetap tidak merender apa-apa jika arahan lukisan menyasarkan buffer bersaiz sifar atau aset kosong.
Perbezaan ini penting kerana laluan kod yang sihat boleh menyembunyikan artifak visual yang hilang.
Menambah semakan tingkah laku
- Kenal pasti elemen dinamik – Imbas sumber untuk tag kanvas, medan input fail, butang muat turun, dan gelung animasi.
- Tentukan hasil yang boleh diperhatikan – Untuk kanvas, perlukan semakan tahap piksel bahawa bitmap tidak kosong. Untuk input fail, sahkan imej pratonton muncul. Untuk muat turun, sahkan fail dicipta pada sistem fail. Untuk animasi, tegaskan bahawa sifat (property) yang dijejak berubah mengikut masa.
- Laporkan liputan – Lampirkan jadual pada output QA yang menyenaraikan setiap ciri, status kesihatan kod, dan hasil pengesahan tingkah laku. Apa-apa yang kekurangan semakan tingkah laku kekal sebagai “tidak disahkan” (unverified) dan bukannya “lulus” (pass).
Mengaplikasikan peraturan ini mengurangkan positif palsu secara drastik dalam set ujian penulis dan juga mendedahkan ketidakpadanan CSS di mana helaian gaya mengisytiharkan satu warna tetapi piksel yang dirender berbeza.
Langkah praktikal untuk ujian visual yang boleh dipercayai
- Jalankan ujian dalam tab yang kelihatan apabila ciri tersebut melibatkan rendering.
- Tunggu sehingga UI stabil; kelewatan tetap selama beberapa saat selalunya mencukupi, tetapi pendekatan yang lebih teguh adalah dengan melakukan polling untuk kanvas bukan kosong menggunakan
getImageData. - Asingkan pengesahan kesihatan kod daripada pengesahan visual dalam skrip ujian; biarkan model AI menilai setiap satu secara bebas.
- Log keadaan keterlihatan dan pengira bingkai (panggilan
requestAnimationFrame) sebagai sebahagian daripada output diagnostik. - Dokumentasikan sebarang larian tab tersembunyi yang tidak dapat dielakkan dengan amaran eksplisit supaya penyemak seterusnya memahami had tersebut.
Apa yang perlu diperhatikan seterusnya
Apabila alatan QA berbantuan AI semakin berkembang, pembangun mesti melayannya sebagai pembantu, bukan hakim. Metrik kesihatan kod akan sentiasa menjadi proksi yang tidak lengkap untuk tingkah laku yang berhadapan dengan pengguna. Pengajarannya mudah: model AI hanya boleh melaporkan apa yang dilihatnya. Jika pelayar tidak pernah melukis (paint) kerana tab tersembunyi, atau jika skrip ujian tidak pernah bertanya “adakah sesuatu muncul di skrin?”, model tersebut akan dengan gembira mengisytiharkan kejayaan. Menambah keperluan keterlihatan dan langkah pengesahan tingkah laku menukarkan status lulus yang nampak sempurna kepada hasil yang boleh dipercayai.
