|
|
@@ -0,0 +1,210 @@
|
|
|
+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);
|
|
|
+ }
|
|
|
+ });
|
|
|
+});
|