166 lines
6.1 KiB
Python
166 lines
6.1 KiB
Python
import time
|
|
|
|
import pytest
|
|
from playwright.async_api import async_playwright
|
|
|
|
from common.base_page_test import BasePageTest
|
|
from common.config import Config
|
|
|
|
|
|
class ConfigManagementTest(BasePageTest):
|
|
"""参数设置测试类"""
|
|
|
|
def generate_config_data(self) -> dict:
|
|
"""生成测试数据"""
|
|
timestamp = int(time.time())
|
|
return {
|
|
'config_name': f'test_config_{timestamp}',
|
|
'config_key': f'test_config_key_{timestamp}',
|
|
'config_value': f'test_config_value_{timestamp}',
|
|
}
|
|
|
|
async def create_config(self, config_name: str, config_key: str, config_value: str) -> None:
|
|
"""创建参数配置"""
|
|
# 点击新增按钮
|
|
await self.page.get_by_role('button', name='新增').first.click()
|
|
|
|
# 等待对话框
|
|
dialog = self.page.get_by_role('dialog')
|
|
await dialog.wait_for()
|
|
|
|
# 填写参数信息
|
|
await dialog.get_by_role('textbox', name='参数名称').fill(config_name)
|
|
await dialog.get_by_role('textbox', name='参数键名').fill(config_key)
|
|
await dialog.get_by_role('textbox', name='参数键值').fill(config_value)
|
|
|
|
# 等待一段时间确保输入完成
|
|
await self.page.wait_for_timeout(500)
|
|
|
|
# 选择参数状态 - 选择系统内置选项为N(否),避免后端限制删除
|
|
# 在对话框中找到系统内置的单选按钮并选择
|
|
await self.wait_for_selector('input[type="radio"]', timeout=5000)
|
|
# 点击系统内置'否'选项
|
|
# 根据codegen脚本,使用更精确的定位器
|
|
await self.page.locator('label:nth-child(2) > .el-radio__input > .el-radio__inner').click()
|
|
|
|
# 等待一段时间确保选择完成
|
|
await self.page.wait_for_timeout(500)
|
|
|
|
# 点击确认按钮
|
|
confirm_button = self.page.get_by_role('button', name='确 定').first
|
|
await confirm_button.click()
|
|
|
|
# 等待一段时间确保请求发送
|
|
await self.page.wait_for_timeout(1000)
|
|
|
|
# 等待新增成功提示
|
|
await self.wait_for_selector('div:has-text("新增成功")', timeout=10000)
|
|
|
|
async def search_config(self, config_name: str, config_key: str = '') -> None:
|
|
"""搜索参数配置"""
|
|
# 在查询表单中输入参数信息进行查询
|
|
await self.page.get_by_role('textbox', name='参数名称').fill(config_name)
|
|
if config_key:
|
|
await self.page.get_by_role('textbox', name='参数键名').fill(config_key)
|
|
|
|
# 点击搜索按钮
|
|
await self.page.get_by_role('button', name='搜索').first.click()
|
|
|
|
# 等待搜索结果加载
|
|
await self.page.wait_for_timeout(1000)
|
|
|
|
async def edit_config(self, updated_value: str) -> None:
|
|
"""编辑参数配置"""
|
|
# 点击编辑按钮
|
|
await self.page.locator('tbody').get_by_role('button', name='修改').nth(0).click()
|
|
|
|
# 等待对话框
|
|
dialog = self.page.get_by_role('dialog')
|
|
await dialog.wait_for()
|
|
|
|
# 修改参数键值
|
|
await dialog.get_by_role('textbox', name='参数键值').fill(updated_value)
|
|
|
|
# 确认
|
|
await self.page.get_by_role('button', name='确 定').first.click()
|
|
|
|
# 等待编辑成功提示
|
|
await self.wait_for_selector('div:has-text("修改成功")', timeout=10000)
|
|
|
|
async def delete_config(self) -> None:
|
|
"""删除参数配置"""
|
|
# 点击删除按钮
|
|
await self.page.locator('tbody').get_by_role('button', name='删除').nth(0).click()
|
|
|
|
# 确认删除
|
|
await self.page.get_by_role('button', name='确定').first.click()
|
|
|
|
# 等待删除成功提示
|
|
await self.wait_for_selector('div:has-text("删除成功")', timeout=10000)
|
|
|
|
# 重置查询表单,确保能看到所有参数
|
|
reset_button = self.page.get_by_role('button', name='重置')
|
|
await reset_button.click()
|
|
|
|
# 等待列表刷新
|
|
await self.page.wait_for_timeout(1000)
|
|
|
|
async def test_config_crud_operations(self) -> None:
|
|
"""测试参数设置的增删查改功能"""
|
|
# 访问参数设置页面
|
|
await self.goto_page(Config.frontend_url + '/system/config')
|
|
|
|
# 等待页面加载完成
|
|
await self.wait_for_page_title('参数设置', timeout=10000)
|
|
await self.page.wait_for_timeout(1000) # 等待列表刷新
|
|
|
|
# 记录初始参数数量
|
|
initial_config_count = await self.get_table_total_rows()
|
|
|
|
# 生成测试数据
|
|
data = self.generate_config_data()
|
|
|
|
# 1.新增
|
|
await self.create_config(data['config_name'], data['config_key'], data['config_value'])
|
|
|
|
# 验证新增
|
|
await self.page.wait_for_timeout(1000) # 等待列表刷新
|
|
new_config_count = await self.get_table_total_rows()
|
|
assert new_config_count > initial_config_count, '新增参数后数量应该增加'
|
|
|
|
# 2.搜索
|
|
await self.search_config(data['config_name'], data['config_key'])
|
|
|
|
# 验证搜索
|
|
search_result_count = await self.get_table_total_rows()
|
|
assert search_result_count >= 1, '搜索结果应该至少包含一个参数'
|
|
|
|
# 3.编辑
|
|
await self.edit_config(f'updated_config_value_{time.time()}')
|
|
|
|
# 验证编辑
|
|
await self.page.wait_for_timeout(1000) # 等待列表刷新
|
|
|
|
# 重新搜索以验证修改结果
|
|
await self.search_config(data['config_name'])
|
|
|
|
# 4.删除
|
|
await self.delete_config()
|
|
|
|
# 验证删除
|
|
await self.page.wait_for_timeout(1000) # 等待列表刷新
|
|
final_config_count = await self.get_table_total_rows()
|
|
assert final_config_count == initial_config_count, '删除参数后数量应该恢复到初始值'
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_config_management_page() -> None:
|
|
"""测试参数设置页面功能"""
|
|
async with async_playwright() as p:
|
|
test_instance = ConfigManagementTest()
|
|
await test_instance.setup(p)
|
|
try:
|
|
await test_instance.test_config_crud_operations()
|
|
finally:
|
|
await test_instance.teardown()
|