初始提交
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
import re
|
||||
import time
|
||||
|
||||
import pytest
|
||||
from playwright.async_api import async_playwright
|
||||
|
||||
from common.base_page_test import BasePageTest
|
||||
from common.config import Config
|
||||
|
||||
|
||||
class NoticeManagementTest(BasePageTest):
|
||||
"""通知公告管理测试类"""
|
||||
|
||||
def generate_notice_data(self) -> dict:
|
||||
"""生成测试数据"""
|
||||
timestamp = int(time.time())
|
||||
return {
|
||||
'notice_title': f'test_notice_{timestamp}',
|
||||
'updated_title': f'updated_notice_{timestamp}',
|
||||
}
|
||||
|
||||
async def create_notice(self, notice_title: str, notice_type: int = 1, notice_content: 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(notice_title)
|
||||
|
||||
# 选择公告类型
|
||||
# 根据codegen脚本,点击下拉框触发器
|
||||
await self.page.locator('div').filter(has_text=re.compile(r'^请选择$')).nth(4).click()
|
||||
# 选择对应类型选项,1为通知,2为公告
|
||||
if notice_type == 1:
|
||||
await self.page.get_by_role('option', name='通知').click()
|
||||
else:
|
||||
await self.page.get_by_role('option', name='公告').click()
|
||||
|
||||
# 填写公告内容
|
||||
await self.page.locator('.ql-container').click()
|
||||
await self.page.locator('.ql-editor').fill(notice_content)
|
||||
|
||||
# 等待一段时间确保输入完成
|
||||
await self.page.wait_for_timeout(500)
|
||||
|
||||
# 点击确认按钮
|
||||
await self.page.get_by_role('button', name='确 定').first.click()
|
||||
|
||||
# 等待一段时间确保请求发送
|
||||
await self.page.wait_for_timeout(1000)
|
||||
|
||||
# 等待新增成功提示
|
||||
await self.wait_for_selector('div:has-text("新增成功")', timeout=10000)
|
||||
|
||||
async def search_notice(self, notice_title: str) -> None:
|
||||
"""搜索通知公告"""
|
||||
# 在查询表单中输入公告标题进行查询
|
||||
await self.page.get_by_role('textbox', name='公告标题').fill(notice_title)
|
||||
|
||||
# 点击搜索按钮
|
||||
await self.page.get_by_role('button', name='搜索').first.click()
|
||||
|
||||
# 等待搜索结果加载
|
||||
await self.page.wait_for_timeout(1000)
|
||||
|
||||
async def edit_notice(self, updated_title: str, updated_content: 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_title)
|
||||
|
||||
# 修改公告内容
|
||||
await self.page.locator('.ql-editor').fill(updated_content)
|
||||
|
||||
# 点击确认按钮
|
||||
await self.page.get_by_role('button', name='确 定').first.click()
|
||||
|
||||
# 等待编辑成功提示
|
||||
await self.wait_for_selector('div:has-text("修改成功")', timeout=10000)
|
||||
|
||||
async def delete_notice(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)
|
||||
|
||||
# 重置查询表单,确保能看到所有公告
|
||||
await self.page.get_by_role('button', name='重置').click()
|
||||
|
||||
# 等待列表刷新
|
||||
await self.page.wait_for_timeout(1000)
|
||||
|
||||
async def test_notice_crud_operations(self) -> None:
|
||||
"""测试通知公告的增删查改功能"""
|
||||
# 访问通知公告页面
|
||||
await self.goto_page(Config.frontend_url + '/system/notice')
|
||||
|
||||
# 等待页面加载完成
|
||||
await self.wait_for_page_title('通知公告', timeout=10000)
|
||||
await self.page.wait_for_timeout(1000) # 等待列表刷新
|
||||
|
||||
# 记录初始公告数量
|
||||
initial_notice_count = await self.get_table_total_rows()
|
||||
|
||||
# 生成测试数据
|
||||
data = self.generate_notice_data()
|
||||
|
||||
# 创建公告
|
||||
await self.create_notice(data['notice_title'])
|
||||
|
||||
# 验证公告已添加到列表中
|
||||
await self.page.wait_for_timeout(1000) # 等待列表刷新
|
||||
new_notice_count = await self.get_table_total_rows()
|
||||
assert new_notice_count > initial_notice_count, '新增公告后数量应该增加'
|
||||
|
||||
# 搜索公告
|
||||
await self.search_notice(data['notice_title'])
|
||||
|
||||
# 验证搜索结果中包含新增的公告
|
||||
search_result_count = await self.get_table_total_rows()
|
||||
assert search_result_count >= 1, '搜索结果应该至少包含一个公告'
|
||||
|
||||
# 编辑公告
|
||||
await self.edit_notice(data['updated_title'])
|
||||
|
||||
# 验证编辑成功
|
||||
await self.page.wait_for_timeout(1000) # 等待列表刷新
|
||||
|
||||
# 重新搜索以验证修改结果
|
||||
await self.search_notice(data['updated_title'])
|
||||
|
||||
# 删除公告
|
||||
await self.delete_notice()
|
||||
|
||||
# 验证公告已从列表中删除
|
||||
await self.page.wait_for_timeout(1000) # 等待列表刷新
|
||||
final_notice_count = await self.get_table_total_rows()
|
||||
assert final_notice_count == initial_notice_count, '删除公告后数量应该恢复到初始值'
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_notice_management_page() -> None:
|
||||
"""测试通知公告页面功能"""
|
||||
async with async_playwright() as p:
|
||||
test_instance = NoticeManagementTest()
|
||||
await test_instance.setup(p)
|
||||
try:
|
||||
await test_instance.test_notice_crud_operations()
|
||||
finally:
|
||||
await test_instance.teardown()
|
||||
Reference in New Issue
Block a user