131 lines
5.1 KiB
Python
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. 点击'获取数据并分析'按钮,然后观察是否会自动刷新") |