初始提交
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
import time
|
||||
|
||||
import pytest
|
||||
from playwright.async_api import async_playwright
|
||||
|
||||
from common.base_page_test import BasePageTest
|
||||
from common.config import Config
|
||||
|
||||
|
||||
class RoleManagementTest(BasePageTest):
|
||||
"""角色管理测试类"""
|
||||
|
||||
def generate_role_data(self) -> dict:
|
||||
"""生成测试数据"""
|
||||
timestamp = int(time.time())
|
||||
return {
|
||||
'role_name': f'test_role_{timestamp}',
|
||||
'role_key': f'test_{timestamp}',
|
||||
}
|
||||
|
||||
async def create_role(self, role_name: str, role_key: str, role_sort: int = 3) -> None:
|
||||
"""创建角色"""
|
||||
# 点击新增按钮
|
||||
await self.page.get_by_role('button', name='新增').click()
|
||||
|
||||
# 等待对话框
|
||||
dialog = self.page.get_by_role('dialog')
|
||||
await dialog.wait_for()
|
||||
|
||||
# 填写信息
|
||||
await dialog.get_by_role('textbox', name='角色名称').fill(role_name)
|
||||
await dialog.get_by_role('textbox', name='权限字符').fill(role_key)
|
||||
await dialog.get_by_role('spinbutton', name='角色顺序').fill(str(role_sort))
|
||||
|
||||
# 选择菜单权限 (点击第一个复选框)
|
||||
await self.page.locator('.el-tree-node__content .el-checkbox').first.click()
|
||||
|
||||
# 确定
|
||||
await self.page.get_by_role('button', name='确 定').click()
|
||||
|
||||
# 等待成功提示
|
||||
await self.wait_for_selector('div:has-text("新增成功")', timeout=10000)
|
||||
|
||||
async def search_role(self, role_name: str, role_key: str) -> None:
|
||||
"""搜索角色"""
|
||||
search_form = self.page.locator('form').first
|
||||
await search_form.get_by_placeholder('请输入角色名称').fill(role_name)
|
||||
await search_form.get_by_placeholder('请输入权限字符').fill(role_key)
|
||||
await search_form.get_by_role('button', name='搜索').click()
|
||||
|
||||
# 等待加载
|
||||
await self.page.wait_for_timeout(1000)
|
||||
|
||||
async def edit_role(self, new_remark: str) -> None:
|
||||
"""编辑角色"""
|
||||
# 点击修改按钮 (第一行)
|
||||
# 按钮没有文字,只有图标,所以使用 nth(0)
|
||||
row = self.page.locator('tbody tr').first
|
||||
await row.get_by_role('button').nth(0).click()
|
||||
|
||||
dialog = self.page.get_by_role('dialog')
|
||||
await dialog.wait_for()
|
||||
|
||||
# 修改备注
|
||||
await dialog.get_by_role('textbox', name='备注').fill(new_remark)
|
||||
|
||||
# 确定
|
||||
await self.page.get_by_role('button', name='确 定').click()
|
||||
|
||||
# 等待成功提示
|
||||
await self.wait_for_selector('div:has-text("修改成功")', timeout=10000)
|
||||
|
||||
async def change_role_status(self) -> None:
|
||||
"""修改角色状态"""
|
||||
# 点击开关 (第一行)
|
||||
# 使用 .el-switch__core 或者 role=switch
|
||||
# script.py uses .el-switch__action, let's try .el-switch
|
||||
switch = self.page.locator('.el-switch').first
|
||||
await switch.click()
|
||||
|
||||
# 确认对话框
|
||||
await self.page.get_by_role('button', name='确定').click()
|
||||
await self.wait_for_selector('div:has-text("成功")', timeout=5000)
|
||||
|
||||
# 再次点击恢复
|
||||
await self.page.wait_for_timeout(1000)
|
||||
await switch.click()
|
||||
await self.page.get_by_role('button', name='确定').click()
|
||||
await self.wait_for_selector('div:has-text("成功")', timeout=5000)
|
||||
|
||||
async def delete_role(self) -> None:
|
||||
"""删除角色"""
|
||||
# 点击删除按钮 (第一行第二个按钮)
|
||||
row = self.page.locator('tbody tr').first
|
||||
await row.get_by_role('button').nth(1).click()
|
||||
|
||||
# 确认删除
|
||||
await self.page.get_by_role('button', name='确定').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_role_crud_operations(self) -> None:
|
||||
"""测试角色管理CRUD"""
|
||||
# 访问页面
|
||||
await self.goto_page(Config.frontend_url + '/system/role')
|
||||
await self.wait_for_page_title('角色管理', timeout=10000)
|
||||
|
||||
# 生成测试数据
|
||||
data = self.generate_role_data()
|
||||
|
||||
# 1. 新增
|
||||
await self.create_role(data['role_name'], data['role_key'])
|
||||
|
||||
# 验证新增结果
|
||||
await self.search_role(data['role_name'], data['role_key'])
|
||||
rows = await self.get_table_total_rows()
|
||||
assert rows >= 1, '新增后搜索应有结果'
|
||||
|
||||
# 2. 修改状态
|
||||
await self.change_role_status()
|
||||
|
||||
# 3. 编辑
|
||||
await self.edit_role('Updated remark')
|
||||
|
||||
# 4. 删除
|
||||
await self.delete_role()
|
||||
|
||||
# 验证删除结果
|
||||
await self.search_role(data['role_name'], data['role_key'])
|
||||
rows_after = await self.get_table_total_rows()
|
||||
assert rows_after == 0, '删除后搜索应无结果'
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_role_management_page() -> None:
|
||||
"""测试角色管理页面功能"""
|
||||
async with async_playwright() as p:
|
||||
test_instance = RoleManagementTest()
|
||||
await test_instance.setup(p)
|
||||
try:
|
||||
await test_instance.test_role_crud_operations()
|
||||
finally:
|
||||
await test_instance.teardown()
|
||||
Reference in New Issue
Block a user