@@ -13,38 +13,40 @@ test.describe('创建任务', () => {
1313
1414 test ( '应该成功创建基本任务' , async ( { page } ) => {
1515 // 点击"新建任务"按钮
16- await page . click ( 'button:has-text("新建任务")' )
16+ await page . locator ( '[data-test-id="task-create-button"]' ) . click ( )
1717
18- // 等待对话框出现(使用 role="heading" 而非文本)
18+ // 等待对话框出现
1919 await expect ( page . getByRole ( 'heading' , { name : '新建任务' } ) ) . toBeVisible ( )
2020
2121 // 填写任务标题
22- await page . fill ( 'input[id="title"]' , testTasks . basic . title )
23- await page . fill ( 'textarea[id="description"]' , testTasks . basic . description )
22+ await page . locator ( '[data-test-id="task-create-title-input"]' ) . fill ( testTasks . basic . title )
23+ await page
24+ . locator ( '[data-test-id="task-create-description-input"]' )
25+ . fill ( testTasks . basic . description )
2426
2527 // 点击创建按钮
26- await page . click ( 'button:has-text("创建")' )
28+ await page . locator ( '[data-test-id="task-create-submit-button"]' ) . click ( )
2729
2830 // 等待对话框关闭
29- await expect ( page . locator ( 'input[ id="title"]' ) ) . not . toBeVisible ( )
31+ await expect ( page . locator ( '[data-test- id="task-create- title-input "]' ) ) . not . toBeVisible ( )
3032
3133 // 验证任务出现在列表中(使用 first() 避免重复元素)
3234 await expect ( page . locator ( `text=${ testTasks . basic . title } ` ) . first ( ) ) . toBeVisible ( )
3335 } )
3436
3537 test ( '应该能够创建高优先级任务' , async ( { page } ) => {
36- await page . click ( 'button:has-text("新建任务")' )
38+ await page . locator ( '[data-test-id="task-create-button"]' ) . click ( )
3739
38- await page . fill ( 'input[id="title"]' , testTasks . urgent . title )
39- await page . fill ( 'textarea[id="description"]' , testTasks . urgent . description )
40+ await page . locator ( '[data-test-id="task-create-title-input"]' ) . fill ( testTasks . urgent . title )
41+ await page
42+ . locator ( '[data-test-id="task-create-description-input"]' )
43+ . fill ( testTasks . urgent . description )
4044
4145 // 选择优先级(在对话框内的 Select 组件)
42- // 等待对话框内的 SelectTrigger 出现
43- const dialog = page . locator ( '[role="dialog"]' )
44- await dialog . locator ( 'button[role="combobox"]' ) . click ( )
45- await page . locator ( '[role="option"]' , { hasText : '高' } ) . click ( )
46+ await page . locator ( '[data-test-id="task-create-priority-select"]' ) . click ( )
47+ await page . locator ( '[role="option"]:has-text("高")' ) . click ( )
4648
47- await page . click ( 'button:has-text("创建")' )
49+ await page . locator ( '[data-test-id="task-create-submit-button"]' ) . click ( )
4850
4951 // 验证任务创建成功
5052 await expect ( page . locator ( `text=${ testTasks . urgent . title } ` ) . first ( ) ) . toBeVisible ( {
@@ -56,24 +58,24 @@ test.describe('创建任务', () => {
5658 } )
5759
5860 test ( '应该能够创建带标签的任务' , async ( { page } ) => {
59- await page . click ( 'button:has-text("新建任务")' )
61+ await page . locator ( '[data-test-id="task-create-button"]' ) . click ( )
6062
61- await page . fill ( 'input[ id="title"]', testTasks . withTags . title )
63+ await page . locator ( '[data-test- id="task-create- title-input "]') . fill ( testTasks . withTags . title )
6264
63- // 添加标签(找到对话框内的标签输入框)
64- const dialog = page . locator ( '[role="dialog"]' )
65- const tagInput = dialog . locator ( 'input[placeholder*="标签"]' )
65+ // 添加标签
66+ const tagInput = page . locator ( '[data-test-id="task-create-tag-input"]' )
6667
6768 for ( const tag of testTasks . withTags . tags || [ ] ) {
6869 await tagInput . fill ( tag )
6970 // 使用点击"添加"按钮而不是回车(更可靠)
70- await dialog . locator ( 'button:has-text("添加") ' ) . click ( )
71+ await page . locator ( '[data-test-id="task-create-tag-add-button"] ' ) . click ( )
7172
7273 // 验证标签已添加到对话框中
74+ const dialog = page . locator ( '[role="dialog"]' )
7375 await expect ( dialog . locator ( `text="${ tag } "` ) ) . toBeVisible ( )
7476 }
7577
76- await page . click ( 'button:has-text("创建")' )
78+ await page . locator ( '[data-test-id="task-create-submit-button"]' ) . click ( )
7779
7880 // 验证任务创建成功(使用 first() 避免重复)
7981 await expect ( page . locator ( `text=${ testTasks . withTags . title } ` ) . first ( ) ) . toBeVisible ( {
@@ -82,37 +84,35 @@ test.describe('创建任务', () => {
8284 } )
8385
8486 test ( '空标题应该无法创建' , async ( { page } ) => {
85- await page . click ( 'button:has-text("新建任务")' )
87+ await page . locator ( '[data-test-id="task-create-button"]' ) . click ( )
8688
8789 // 不填写标题,直接点击创建
88- await page . fill ( 'textarea[ id="description"]', 'Only description' )
90+ await page . locator ( '[data-test- id="task-create- description-input "]') . fill ( 'Only description' )
8991
90- // 监听对话框alert
91- page . on ( 'dialog' , ( dialog ) => {
92- expect ( dialog . message ( ) ) . toContain ( '标题' )
93- dialog . accept ( )
94- } )
95-
96- await page . click ( 'button:has-text("创建")' )
92+ // 点击创建按钮
93+ await page . locator ( '[data-test-id="task-create-submit-button"]' ) . click ( )
9794
98- // 等待一下
95+ // 等待验证错误出现
9996 await page . waitForTimeout ( 500 )
10097
101- // 验证对话框仍然显示(未关闭)
102- await expect ( page . locator ( 'input[id="title"]' ) ) . toBeVisible ( )
98+ // 验证对话框仍然显示(未关闭)- 表单验证失败,对话框应该保持打开
99+ await expect ( page . locator ( '[data-test-id="task-create-title-input"]' ) ) . toBeVisible ( )
100+
101+ // 验证显示验证错误信息
102+ await expect ( page . getByText ( '任务标题不能为空' ) ) . toBeVisible ( )
103103 } )
104104
105105 test ( '取消创建应该关闭对话框' , async ( { page } ) => {
106- await page . click ( 'button:has-text("新建任务")' )
106+ await page . locator ( '[data-test-id="task-create-button"]' ) . click ( )
107107
108108 // 填写部分内容
109- await page . fill ( 'input[ id="title"]', 'Will be cancelled' )
109+ await page . locator ( '[data-test- id="task-create- title-input "]') . fill ( 'Will be cancelled' )
110110
111111 // 点击取消按钮
112- await page . click ( 'button:has-text("取消")' )
112+ await page . locator ( '[data-test-id="task-create-cancel-button"]' ) . click ( )
113113
114114 // 验证对话框已关闭
115- await expect ( page . locator ( 'input[ id="title"]' ) ) . not . toBeVisible ( )
115+ await expect ( page . locator ( '[data-test- id="task-create- title-input "]' ) ) . not . toBeVisible ( )
116116
117117 // 验证任务未创建
118118 await expect ( page . locator ( 'text=Will be cancelled' ) ) . not . toBeVisible ( )
0 commit comments