# 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: atomic_check.spec.js >> Capability demo page atomic tests verification - Location: test/atomic_check.spec.js:3:1 # Error details ``` Error: expect(received).toContain(expected) // indexOf Expected value: "Framework Is Active" Received array: [] ``` # Page snapshot ```yaml - generic [ref=e2]: - navigation [ref=e4] - generic [ref=e6]: - generic [ref=e7]: - heading "项目概览" [level=2] [ref=e8] - button " 切换主题" [ref=e10] [cursor=pointer]: - generic [ref=e11]:  - text: 切换主题 - generic [ref=e12]: - generic [ref=e13]:  - heading "Apigo Base Mega Demo" [level=1] [ref=e14] - paragraph [ref=e15]: 点击左侧菜单查看不同组件的能力展示 - generic [ref=e16]: - heading "核心原子能力验证 (State singleton)" [level=4] [ref=e17] - generic [ref=e18]: - generic [ref=e20]: - generic [ref=e21]: 1. $text & 样式绑定 - generic [ref=e22]: - paragraph [ref=e23]: Synchronous State Ready - button "切换颜色" [ref=e24] [cursor=pointer] - generic [ref=e26]: - generic [ref=e27]: 2. $if 显式模板判断 - generic [ref=e28]: - generic [ref=e29]: 已激活 ($if="true") - button "切换显示状态" [ref=e30] [cursor=pointer] - generic [ref=e32]: - generic [ref=e33]: 3. $each 循环渲染 - generic [ref=e35]: - generic [ref=e36]: Alpha - generic [ref=e37]: Beta - generic [ref=e38]: Gamma - generic [ref=e40]: - generic [ref=e41]: 4. $if 嵌套 $each - generic [ref=e42]: - generic [ref=e43]: - generic [ref=e44]: Red - generic [ref=e45]: Green - generic [ref=e46]: Blue - button "切换外层容器" [ref=e47] [cursor=pointer] - generic [ref=e49]: - generic [ref=e50]: - text: 5. $each 嵌套 $if (奇偶成员过滤) - button "仅看奇数项" [ref=e51] [cursor=pointer] - generic [ref=e53]: - generic [ref=e54]: - generic [ref=e55]:  - text: Alice (1) - generic [ref=e56]: - generic [ref=e57]:  - text: Bob (2) - generic [ref=e58]: - generic [ref=e59]:  - text: Charlie (3) - generic [ref=e60]: - generic [ref=e61]:  - text: David (4) - generic [ref=e62]: - generic [ref=e63]:  - text: Eve (5) ``` # Test source ```ts 1 | import { test, expect } from '@playwright/test'; 2 | 3 | test('Capability demo page atomic tests verification', async ({ page }) => { 4 | page.on('console', msg => console.log('BROWSER:', msg.text())); 5 | 6 | await page.goto('/test/capability.html'); 7 | await page.waitForTimeout(3000); 8 | 9 | const testResults = await page.evaluate(() => { 10 | const getTexts = (sel) => Array.from(document.querySelectorAll(sel)).map(el => el.textContent.trim()); 11 | const getColors = (sel) => Array.from(document.querySelectorAll(sel)).map(el => el.style.color); 12 | 13 | return { 14 | textBinding: getTexts('p[\\$text="DemoState.testTitle"]'), 15 | textColor: getColors('p[\\$text="DemoState.testTitle"]'), 16 | ifTrue: document.querySelector('.alert-success')?.textContent.trim(), 17 | ifFalse: document.querySelector('.alert-danger')?.textContent.trim(), 18 | eachItems: getTexts('li.list-group-item'), 19 | nestedEachInIf: getTexts('.badge.bg-primary'), 20 | nestedIfInEach: getTexts('.bg-white') 21 | }; 22 | }); 23 | 24 | console.log('Atomic Test Results:', JSON.stringify(testResults, null, 2)); 25 | > 26 | expect(testResults.textBinding).toContain('Framework Is Active'); | ^ Error: expect(received).toContain(expected) // indexOf 27 | expect(testResults.ifTrue).toBe('显示的内容 (True)'); 28 | expect(testResults.ifFalse).toBeUndefined(); 29 | expect(testResults.eachItems).toHaveLength(3); 30 | expect(testResults.nestedEachInIf).toHaveLength(3); 31 | expect(testResults.nestedIfInEach).toHaveLength(2); // Item A and C are visible 32 | }); 33 | ```