""" 测试自动刷新功能 """ import time import requests from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.options import Options import unittest class TestAutoRefresh(unittest.TestCase): def setUp(self): """设置测试环境""" # 配置Chrome选项 chrome_options = Options() chrome_options.add_argument('--headless') # 无头模式 chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') try: self.driver = webdriver.Chrome(options=chrome_options) self.driver.get('http://localhost:8051') self.wait = WebDriverWait(self.driver, 10) except Exception as e: print(f"无法启动Chrome浏览器: {e}") self.skipTest("Chrome浏览器不可用") def tearDown(self): """清理测试环境""" if hasattr(self, 'driver'): self.driver.quit() def test_auto_refresh_components_exist(self): """测试自动刷新组件是否存在""" # 检查自动刷新勾选框 auto_refresh_toggle = self.wait.until( EC.presence_of_element_located((By.ID, 'auto-refresh-toggle')) ) self.assertIsNotNone(auto_refresh_toggle) # 检查刷新间隔下拉菜单 refresh_interval_dropdown = self.driver.find_element(By.ID, 'refresh-interval-dropdown') self.assertIsNotNone(refresh_interval_dropdown) # 检查状态显示 refresh_status = self.driver.find_element(By.ID, 'refresh-status') self.assertIsNotNone(refresh_status) # 检查下次刷新时间显示 next_refresh_time = self.driver.find_element(By.ID, 'next-refresh-time') self.assertIsNotNone(next_refresh_time) def test_initial_state(self): """测试初始状态""" # 检查初始状态:自动刷新未启用 refresh_status = self.driver.find_element(By.ID, 'refresh-status') self.assertEqual(refresh_status.text, "未启用") # 检查下次刷新时间显示为 "--" next_refresh_time = self.driver.find_element(By.ID, 'next-refresh-time') self.assertEqual(next_refresh_time.text, "--") # 检查刷新间隔下拉菜单是否禁用 refresh_interval_dropdown = self.driver.find_element(By.ID, 'refresh-interval-dropdown') # Dash组件的disabled状态需要通过其他方式检查 def test_enable_auto_refresh(self): """测试启用自动刷新""" # 勾选自动刷新 auto_refresh_checkbox = self.wait.until( EC.element_to_be_clickable((By.XPATH, "//input[@value='enabled']")) ) auto_refresh_checkbox.click() # 等待状态更新 time.sleep(2) # 检查状态是否更新 refresh_status = self.driver.find_element(By.ID, 'refresh-status') self.assertIn("已启用", refresh_status.text) self.assertIn("15秒", refresh_status.text) # 默认15秒 def test_change_refresh_interval(self): """测试更改刷新间隔""" # 先启用自动刷新 auto_refresh_checkbox = self.wait.until( EC.element_to_be_clickable((By.XPATH, "//input[@value='enabled']")) ) auto_refresh_checkbox.click() time.sleep(1) # 更改刷新间隔(这部分可能需要根据Dash的实际实现调整) # 由于Dash组件的交互比较复杂,这里主要验证组件存在 refresh_interval_dropdown = self.driver.find_element(By.ID, 'refresh-interval-dropdown') self.assertIsNotNone(refresh_interval_dropdown) def test_web_server_running(): """测试Web服务器是否运行""" try: response = requests.get('http://localhost:8051', timeout=5) return response.status_code == 200 except: return False if __name__ == '__main__': print("测试自动刷新功能...") # 首先检查web服务器是否运行 if not test_web_server_running(): print("❌ Web服务器未运行在 http://localhost:8051") print("请先运行: python -c \"from web.app import run_app; run_app(debug=False, port=8051)\"") exit(1) print("✅ Web服务器正在运行") # 运行测试 try: unittest.main(argv=[''], exit=False, verbosity=2) except Exception as e: print(f"测试运行出错: {e}") print("可能是因为没有安装selenium或Chrome驱动") print("手动测试建议:") print("1. 打开浏览器访问 http://localhost:8051") print("2. 查看是否有'自动刷新'勾选框和'刷新间隔'下拉菜单") print("3. 勾选自动刷新,查看状态是否变为'已启用'") print("4. 修改刷新间隔,查看状态是否相应更新") print("5. 点击'获取数据并分析'按钮,然后观察是否会自动刷新")