88 lines
3.6 KiB
TypeScript
88 lines
3.6 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test.describe('调试创建角色功能', () => {
|
|
test('调试创建角色流程', async ({ page }) => {
|
|
const timestamp = Date.now();
|
|
const roleName = `测试角色_${timestamp}`;
|
|
const roleKey = `test_role_${timestamp}`;
|
|
|
|
await test.step('导航到角色管理', async () => {
|
|
await page.goto('/dashboard');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.locator('text=系统管理').click();
|
|
await page.waitForTimeout(500);
|
|
await page.locator('text=角色管理').click();
|
|
await page.waitForLoadState('networkidle');
|
|
await expect(page).toHaveURL(/.*roles/, { timeout: 10000 });
|
|
});
|
|
|
|
await test.step('点击创建角色按钮', async () => {
|
|
await page.locator('button:has-text("新增角色")').click();
|
|
await page.waitForSelector('.el-dialog', { state: 'visible', timeout: 5000 });
|
|
await page.screenshot({ path: 'test-results/debug-1-dialog-opened.png' });
|
|
});
|
|
|
|
await test.step('填写角色信息', async () => {
|
|
const dialog = page.locator('.el-dialog');
|
|
|
|
const roleNameInput = dialog.locator('input').first();
|
|
await roleNameInput.fill(roleName);
|
|
await roleNameInput.blur();
|
|
await page.waitForTimeout(300);
|
|
await page.screenshot({ path: 'test-results/debug-2-filled-roleName.png' });
|
|
|
|
const roleKeyInput = dialog.locator('input').nth(1);
|
|
await roleKeyInput.fill(roleKey);
|
|
await roleKeyInput.blur();
|
|
await page.waitForTimeout(300);
|
|
await page.screenshot({ path: 'test-results/debug-3-filled-roleKey.png' });
|
|
|
|
const roleSortInput = dialog.locator('.el-input-number .el-input__inner');
|
|
await roleSortInput.fill('99');
|
|
await roleSortInput.blur();
|
|
await page.waitForTimeout(300);
|
|
await page.screenshot({ path: 'test-results/debug-4-filled-roleSort.png' });
|
|
|
|
console.log('Filled form with:', { roleName, roleKey, roleSort: 99 });
|
|
|
|
const formItems = await dialog.locator('.el-form-item').all();
|
|
console.log('Number of form items:', formItems.length);
|
|
|
|
for (let i = 0; i < formItems.length; i++) {
|
|
const label = await formItems[i].locator('.el-form-item__label').textContent();
|
|
const hasError = await formItems[i].locator('.el-form-item__error').isVisible().catch(() => false);
|
|
if (hasError) {
|
|
const errorText = await formItems[i].locator('.el-form-item__error').textContent();
|
|
console.log(`Form item "${label}" has error: ${errorText}`);
|
|
}
|
|
}
|
|
});
|
|
|
|
await test.step('提交表单', async () => {
|
|
await page.screenshot({ path: 'test-results/debug-5-before-submit.png' });
|
|
|
|
await page.locator('.el-dialog button:has-text("确定")').click();
|
|
|
|
await page.waitForTimeout(1000);
|
|
await page.screenshot({ path: 'test-results/debug-6-after-submit-1s.png' });
|
|
|
|
await page.waitForTimeout(2000);
|
|
await page.screenshot({ path: 'test-results/debug-7-after-submit-3s.png' });
|
|
|
|
const dialogVisible = await page.locator('.el-dialog').isVisible();
|
|
console.log('Dialog visible after submit:', dialogVisible);
|
|
|
|
const successMessage = await page.locator('.el-message--success').isVisible().catch(() => false);
|
|
console.log('Success message visible:', successMessage);
|
|
|
|
const errorMessage = await page.locator('.el-message--error').isVisible().catch(() => false);
|
|
console.log('Error message visible:', errorMessage);
|
|
|
|
if (errorMessage) {
|
|
const errorText = await page.locator('.el-message--error').textContent();
|
|
console.log('Error message text:', errorText);
|
|
}
|
|
});
|
|
});
|
|
});
|