# -*- coding: utf-8 -*- """ 测试高端大气轮播图主视觉系统 (Test Premium Hero Visual Banners) 验证首屏 4 张轮播图的高清画质、纯净无杂乱文字、高端科技美学、CSS 通透羽化及响应式适配。 """ import os import re import unittest from PIL import Image ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) BANNER_DIR = os.path.join(ROOT_DIR, "public", "assets", "addons", "official", "images", "banners") CSS_PATH = os.path.join(ROOT_DIR, "public", "assets", "addons", "official", "css", "modern_nhc.css") PC_HOME_PATH = os.path.join(ROOT_DIR, "addons", "official", "view", "web", "official_home", "index.html") M_HOME_PATH = os.path.join(ROOT_DIR, "addons", "official", "view", "web", "official_home", "index_e.html") class PremiumHeroBannerTest(unittest.TestCase): """验证高端大气轮播图主视觉""" def test_01_banner_images_high_quality(self): """1. 验证 4 张核心轮播大图物理存在、分辨率高、画质饱满""" banners = ["banner_lead.jpg", "banner_craft.jpg", "banner_agent.jpg", "banner_matrix.jpg"] for b in banners: img_path = os.path.join(BANNER_DIR, b) self.assertTrue(os.path.exists(img_path), f"轮播图不存在: {b}") file_size = os.path.getsize(img_path) self.assertGreater(file_size, 200 * 1024, f"轮播图画质过低或文件过小: {b} ({file_size} bytes)") with Image.open(img_path) as im: width, height = im.size self.assertGreaterEqual(width, 1280, f"宽度不足高清要求: {b}") self.assertGreaterEqual(height, 700, f"高度不足首屏要求: {b}") def test_02_css_uses_clean_banners_and_clear_masks(self): """2. 验证 CSS 使用全新大图,且羽化渐变遮罩在右侧(>52%)完全通透无遮挡""" with open(CSS_PATH, "r", encoding="utf-8") as f: css_content = f.read() for b in ["banner_lead.jpg", "banner_craft.jpg", "banner_agent.jpg", "banner_matrix.jpg"]: self.assertIn(b, css_content, f"CSS 中未正确引用大图: {b}") # 检查是否去除了原本在 50% 覆盖 0.92 白色的遮罩问题 self.assertNotIn("rgba(255, 255, 255, 0.92) 50%", css_content, "CSS 仍保留 50% 处 92% 重度白色遮罩") def test_03_pc_and_mobile_template_integrity(self): """3. 验证 PC 与移动端模板幻灯片数量均为 4,包含对应的主题类名""" for page_path in [PC_HOME_PATH, M_HOME_PATH]: with open(page_path, "r", encoding="utf-8") as f: html = f.read() for i in range(1, 5): self.assertIn(f"nhc-slide-theme-{i}", html, f"页面缺少主题类 nhc-slide-theme-{i}: {page_path}") self.assertEqual(len(re.findall(r'nhc-slide-theme-\d', html)), 4, f"幻灯片数量不等于 4: {page_path}") if __name__ == "__main__": unittest.main()