const { test, expect } = require('@playwright/test'); const BASE_URL = 'https://ajy.danclub.cn'; const TEST_ADMIN = { username: 'admin', password: 'admin123' }; test.describe('6.1 设备分组管理', () => { test.beforeEach(async ({ page }) => { await page.goto(BASE_URL); await page.waitForLoadState('networkidle'); await page.getByPlaceholder('请输入用户名').fill(TEST_ADMIN.username); await page.getByPlaceholder('请输入密码').fill(TEST_ADMIN.password); await page.getByRole('button', { name: '登 录' }).click(); await page.waitForURL(`${BASE_URL}/#/user/app`, { timeout: 10000 }); }); test('DG-001: 查看设备列表(分组视角)', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); await page.waitForTimeout(1000); const tableRows = page.locator('.el-table__body tr'); const count = await tableRows.count(); expect(count).toBeGreaterThanOrEqual(0); }); test('DG-002: 按设备类型筛选(家庭设备)', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const typeSelect = page.locator('.el-select').first(); if (await typeSelect.isVisible()) { await typeSelect.click(); await page.waitForTimeout(300); await page.getByRole('option', { name: '家庭设备' }).click(); await page.getByRole('button', { name: '查询' }).click(); await page.waitForTimeout(1000); } }); test('DG-003: 按设备类型筛选(公共设备)', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const typeSelect = page.locator('.el-select').first(); if (await typeSelect.isVisible()) { await typeSelect.click(); await page.waitForTimeout(300); await page.getByRole('option', { name: '公共设备' }).click(); await page.getByRole('button', { name: '查询' }).click(); await page.waitForTimeout(1000); } }); test('DG-004: 按设备编号精确搜索', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const searchInput = page.getByPlaceholder('请输入设备编号'); if (await searchInput.isVisible()) { await searchInput.fill('AJY001'); await page.getByRole('button', { name: '查询' }).click(); await page.waitForTimeout(1000); } }); test('DG-005: 按绑定用户名模糊搜索', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const boundUserInput = page.getByPlaceholder('用户姓名模糊搜索'); if (await boundUserInput.isVisible()) { await boundUserInput.fill('张'); await page.getByRole('button', { name: '查询' }).click(); await page.waitForTimeout(1000); } }); test('DG-006: 按在线状态筛选-在线', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const statusSelect = page.locator('.el-select').nth(1); if (await statusSelect.isVisible()) { await statusSelect.click(); await page.waitForTimeout(300); await page.getByRole('option', { name: '在线' }).click(); await page.getByRole('button', { name: '查询' }).click(); await page.waitForTimeout(1000); } }); test('DG-007: 按在线状态筛选-离线', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const statusSelect = page.locator('.el-select').nth(1); if (await statusSelect.isVisible()) { await statusSelect.click(); await page.waitForTimeout(300); await page.getByRole('option', { name: '离线' }).click(); await page.getByRole('button', { name: '查询' }).click(); await page.waitForTimeout(1000); } }); test('DG-008: 重置查询条件', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); await page.getByRole('button', { name: '重置' }).click(); await page.waitForTimeout(1000); const searchInput = page.getByPlaceholder('请输入设备编号'); await expect(searchInput).toHaveValue(''); }); test('DG-009: 分页切换', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const nextButton = page.locator('.btn-next').first(); if (await nextButton.isVisible()) { await nextButton.click(); await page.waitForTimeout(1000); } }); test('DG-010: 新增设备-家庭设备', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const addBtn = page.getByRole('button', { name: '新增' }); if (await addBtn.isVisible()) { await addBtn.click(); await page.waitForTimeout(500); await page.getByPlaceholder('请输入设备编号(如:AJY001)').fill('TEST' + Date.now()); await page.getByPlaceholder('请输入设备名称').fill('测试设备'); await page.locator('.el-select').nth(0).click(); await page.waitForTimeout(300); await page.getByRole('option', { name: 'AJY-2026' }).click(); await page.locator('.el-select').nth(1).click(); await page.waitForTimeout(300); await page.getByRole('option', { name: '家庭设备' }).click(); await page.getByPlaceholder('请输入设备序列号').fill('SN' + Date.now()); await page.getByPlaceholder('请输入固件版本(如:v1.2.0)').fill('v1.2.0'); await page.waitForTimeout(300); } }); test('DG-011: 新增设备-公共设备', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const addBtn = page.getByRole('button', { name: '新增' }); if (await addBtn.isVisible()) { await addBtn.click(); await page.waitForTimeout(500); await page.getByPlaceholder('请输入设备编号(如:AJY001)').fill('PUB' + Date.now()); await page.getByPlaceholder('请输入设备名称').fill('公共设备测试'); await page.locator('.el-select').nth(0).click(); await page.waitForTimeout(300); await page.getByRole('option', { name: 'AJY-2026' }).click(); await page.locator('.el-select').nth(1).click(); await page.waitForTimeout(300); await page.getByRole('option', { name: '公共设备' }).click(); await page.getByPlaceholder('请输入设备序列号').fill('SN' + Date.now()); await page.getByPlaceholder('请输入固件版本(如:v1.2.0)').fill('v1.2.0'); await page.waitForTimeout(300); } }); test('DG-012: 设备编号必填验证', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const addBtn = page.getByRole('button', { name: '新增' }); if (await addBtn.isVisible()) { await addBtn.click(); await page.waitForTimeout(500); await page.getByRole('button', { name: '保存' }).click(); await page.waitForTimeout(500); } }); test('DG-013: 设备型号必填验证', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const addBtn = page.getByRole('button', { name: '新增' }); if (await addBtn.isVisible()) { await addBtn.click(); await page.waitForTimeout(500); await page.getByPlaceholder('请输入设备编号(如:AJY001)').fill('TEST' + Date.now()); await page.getByPlaceholder('请输入设备名称').fill('测试设备'); await page.getByRole('button', { name: '保存' }).click(); await page.waitForTimeout(500); } }); test('DG-014: 查看设备详情', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const viewBtn = page.getByRole('button', { name: '查看' }).first(); if (await viewBtn.isVisible()) { await viewBtn.click(); await page.waitForTimeout(500); await page.getByRole('button', { name: '关闭' }).click(); await page.waitForTimeout(300); } }); test('DG-015: 编辑设备信息', async ({ page }) => { await page.goto(`${BASE_URL}/#/device`); await page.waitForLoadState('networkidle'); const editBtn = page.getByRole('button', { name: '编辑' }).first(); if (await editBtn.isVisible()) { await editBtn.click(); await page.waitForTimeout(500); await page.getByPlaceholder('请输入设备名称').clear(); await page.getByPlaceholder('请输入设备名称').fill('测试设备-已编辑'); await page.waitForTimeout(300); } }); });