3.8 KiB
3.8 KiB
Instructions
- Following Playwright test failed.
- Explain why, be concise, respect Playwright best practices.
- Provide a snippet of code with the fix, if possible.
Test info
- Name: users.spec.ts >> 用户管理 >> 新建用户弹窗表单验证
- Location: e2e\users.spec.ts:17:3
Error details
Test timeout of 30000ms exceeded.
Error: page.click: Test timeout of 30000ms exceeded.
Call log:
- waiting for locator('button:has-text("新建用户")')
Page snapshot
- generic [ref=e2]:
- link "跳转到主要内容" [ref=e3] [cursor=pointer]:
- /url: "#root"
- generic [ref=e4]:
- generic [ref=e8]:
- img "safety-certificate" [ref=e10]:
- img [ref=e11]
- heading "ERP Platform" [level=1] [ref=e13]
- paragraph [ref=e14]: 新一代模块化企业资源管理平台
- paragraph [ref=e15]: 身份权限 · 工作流引擎 · 消息中心 · 系统配置
- generic [ref=e16]:
- generic [ref=e17]:
- generic [ref=e18]: SaaS
- generic [ref=e19]: 多租户架构
- generic [ref=e20]:
- generic [ref=e21]: 可插拔
- generic [ref=e22]: 模块化设计
- generic [ref=e23]:
- generic [ref=e24]: 可扩展
- generic [ref=e25]: 事件驱动
- main [ref=e26]:
- generic [ref=e27]:
- heading "欢迎回来" [level=2] [ref=e28]
- paragraph [ref=e29]: 请登录您的账户以继续
- separator [ref=e30]
- generic [ref=e31]:
- generic [ref=e37]:
- img "user" [ref=e39]:
- img [ref=e40]
- textbox "用户名" [ref=e42]
- generic [ref=e48]:
- img "lock" [ref=e50]:
- img [ref=e51]
- textbox "密码" [ref=e53]
- img "eye-invisible" [ref=e55] [cursor=pointer]:
- img [ref=e56]
- button "登 录" [ref=e64] [cursor=pointer]:
- generic [ref=e65]: 登 录
- paragraph [ref=e67]: ERP Platform v0.1.0 · Powered by Rust + React
Test source
1 | import { test, expect } from '@playwright/test';
2 |
3 | test.describe('用户管理', () => {
4 | test('用户列表页面加载并显示表格', async ({ page }) => {
5 | await page.goto('/#/users');
6 | // 标题
7 | await expect(page.locator('h4')).toContainText('用户管理');
8 | // 新建用户按钮
9 | await expect(page.locator('button:has-text("新建用户")')).toBeVisible();
10 | // 搜索框
11 | await expect(page.locator('input[placeholder*="搜索"]')).toBeVisible();
12 | // 表格列头
13 | await expect(page.locator('text=用户')).toBeVisible();
14 | await expect(page.locator('text=状态')).toBeVisible();
15 | });
16 |
17 | test('新建用户弹窗表单验证', async ({ page }) => {
18 | await page.goto('/#/users');
19 | // 点击新建
> 20 | await page.click('button:has-text("新建用户")');
| ^ Error: page.click: Test timeout of 30000ms exceeded.
21 | // 弹窗出现
22 | await expect(page.locator('.ant-modal')).toBeVisible();
23 | // 直接提交应显示验证错误
24 | await page.click('.ant-modal button:has-text("确 定")');
25 | // Ant Design 应显示验证错误(用户名 + 密码必填)
26 | await expect(page.locator('.ant-form-item-explain-error')).toHaveCount(2);
27 | // 关闭弹窗
28 | await page.click('.ant-modal-close');
29 | });
30 |
31 | test('搜索框可输入', async ({ page }) => {
32 | await page.goto('/#/users');
33 | const searchInput = page.locator('input[placeholder*="搜索"]');
34 | await searchInput.fill('admin');
35 | await expect(searchInput).toHaveValue('admin');
36 | });
37 | });
38 |