import { test, expect } from '@playwright/test'; import { AssertionHelper } from '../helpers/assertion-helper'; test.describe('AssertionHelper - 断言辅助工具测试', () => { let assertionHelper: AssertionHelper; let page: any; test.beforeAll(async ({ browser }) => { assertionHelper = new AssertionHelper(); const context = await browser.newContext(); page = await context.newPage(); }); test.afterAll(async ({ browser }) => { await browser.close(); }); test('应该能够验证元素可见性', async () => { await page.setContent(''); await assertionHelper.assertElementVisible(page, 'button', '按钮应该可见'); const button = page.locator('button'); await expect(button).toBeVisible(); }); test('应该能够验证元素隐藏', async () => { await page.setContent('
隐藏的元素
'); await assertionHelper.assertElementHidden(page, 'div', '元素应该隐藏'); const div = page.locator('div'); await expect(div).toBeHidden(); }); test('应该能够验证元素文本', async () => { await page.setContent('

欢迎来到系统

'); await assertionHelper.assertElementText(page, 'h1', '欢迎来到系统', '标题文本应该正确'); const h1 = page.locator('h1'); await expect(h1).toHaveText('欢迎来到系统'); }); test('应该能够验证元素包含文本', async () => { await page.setContent('

这是一段很长的文本内容

'); await assertionHelper.assertElementContainsText(page, 'p', '很长的文本', '段落应该包含指定文本'); const p = page.locator('p'); await expect(p).toContainText('很长的文本'); }); test('应该能够验证元素值', async () => { await page.setContent(''); await assertionHelper.assertElementValue(page, 'input', '默认值', '输入框值应该正确'); const input = page.locator('input'); await expect(input).toHaveValue('默认值'); }); test('应该能够验证元素启用状态', async () => { await page.setContent(''); await assertionHelper.assertElementEnabled(page, 'button', '按钮应该启用'); const button = page.locator('button'); await expect(button).toBeEnabled(); }); test('应该能够验证元素禁用状态', async () => { await page.setContent(''); await assertionHelper.assertElementDisabled(page, 'button', '按钮应该禁用'); const button = page.locator('button'); await expect(button).toBeDisabled(); }); test('应该能够验证复选框选中状态', async () => { await page.setContent(''); await assertionHelper.assertElementChecked(page, 'input[type="checkbox"]', '复选框应该选中'); const checkbox = page.locator('input[type="checkbox"]'); await expect(checkbox).toBeChecked(); }); test('应该能够验证元素数量', async () => { await page.setContent(''); await assertionHelper.assertElementCount(page, 'li', 3, '应该有3个列表项'); const items = page.locator('li'); const count = await items.count(); expect(count).toBe(3); }); test('应该能够验证元素数量大于指定值', async () => { await page.setContent(''); await assertionHelper.assertElementCountGreaterThan(page, 'li', 2, '列表项数量应该大于2'); const items = page.locator('li'); const count = await items.count(); expect(count).toBeGreaterThan(2); }); test('应该能够验证元素数量小于指定值', async () => { await page.setContent(''); await assertionHelper.assertElementCountLessThan(page, 'li', 5, '列表项数量应该小于5'); const items = page.locator('li'); const count = await items.count(); expect(count).toBeLessThan(5); }); test('应该能够验证URL', async () => { await page.goto('https://example.com'); await assertionHelper.assertURL(page, /example\.com/, 'URL应该包含example.com'); await expect(page).toHaveURL(/example\.com/); }); test('应该能够验证页面标题', async () => { await page.setContent('测试页面'); await assertionHelper.assertTitle(page, '测试页面', '页面标题应该正确'); await expect(page).toHaveTitle('测试页面'); }); test('应该能够验证元素属性', async () => { await page.setContent(''); await assertionHelper.assertAttributeValue(page, 'input', 'type', 'password', '输入框类型应该是password'); const input = page.locator('input'); await expect(input).toHaveAttribute('type', 'password'); }); test('应该能够验证CSS类', async () => { await page.setContent(''); await assertionHelper.assertCSSClass(page, 'button', 'btn-primary', '按钮应该有btn-primary类'); const button = page.locator('button'); await expect(button).toHaveClass(/btn-primary/); }); test('应该能够验证成功消息', async () => { await page.setContent('
操作成功
'); await assertionHelper.assertSuccessMessage(page, '应该显示成功消息'); const successMessage = page.locator('.success-message'); await expect(successMessage).toBeVisible(); }); test('应该能够验证错误消息', async () => { await page.setContent('
操作失败
'); await assertionHelper.assertErrorMessage(page, '操作失败', '应该显示错误消息'); const errorMessage = page.locator('.error-message'); await expect(errorMessage).toBeVisible(); await expect(errorMessage).toContainText('操作失败'); }); test('应该能够验证加载状态', async () => { await page.setContent('
加载中...
'); await assertionHelper.assertLoading(page, '应该显示加载状态'); const loading = page.locator('.loading'); await expect(loading).toBeVisible(); }); test('应该能够验证非加载状态', async () => { await page.setContent('
内容
'); await assertionHelper.assertNotLoading(page, '不应该显示加载状态'); const loading = page.locator('.loading'); await expect(loading).toBeHidden(); }); test('应该能够验证模态框可见', async () => { await page.setContent(''); await assertionHelper.assertModalVisible(page, '应该显示模态框'); const modal = page.locator('.modal'); await expect(modal).toBeVisible(); }); test('应该能够验证模态框隐藏', async () => { await page.setContent(''); await assertionHelper.assertModalHidden(page, '模态框应该隐藏'); const modal = page.locator('.modal'); await expect(modal).toBeHidden(); }); test('应该能够验证Toast可见', async () => { await page.setContent('
通知消息
'); await assertionHelper.assertToastVisible(page, '应该显示Toast'); const toast = page.locator('.toast'); await expect(toast).toBeVisible(); }); test('应该能够验证Toast隐藏', async () => { await page.setContent(''); await assertionHelper.assertToastHidden(page, 'Toast应该隐藏'); const toast = page.locator('.toast'); await expect(toast).toBeHidden(); }); test('应该能够处理自定义消息', async () => { await page.setContent(''); await assertionHelper.assertElementVisible(page, 'button', '自定义消息:按钮应该可见'); const button = page.locator('button'); await expect(button).toBeVisible(); }); test('应该能够处理空选择器', async () => { await page.setContent('
内容
'); try { await assertionHelper.assertElementVisible(page, '.non-existent', '不存在的元素'); expect(true).toBe(false); } catch (error) { expect(error).toBeDefined(); } }); test('应该能够处理多个断言', async () => { await page.setContent(`
`); await assertionHelper.assertElementVisible(page, 'input[name="username"]', '用户名输入框应该可见'); await assertionHelper.assertElementVisible(page, 'input[name="password"]', '密码输入框应该可见'); await assertionHelper.assertElementVisible(page, 'button[type="submit"]', '登录按钮应该可见'); await assertionHelper.assertElementEnabled(page, 'button[type="submit"]', '登录按钮应该启用'); }); });