Files
chanlun_1/test_auto_refresh.py
2025-05-23 21:19:32 +08:00

131 lines
5.1 KiB
Python

"""
测试自动刷新功能
"""
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. 点击'获取数据并分析'按钮,然后观察是否会自动刷新")