device-group.spec.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. const { test, expect } = require('@playwright/test');
  2. const BASE_URL = 'https://ajy.danclub.cn';
  3. const TEST_ADMIN = { username: 'admin', password: 'admin123' };
  4. test.describe('6.1 设备分组管理', () => {
  5. test.beforeEach(async ({ page }) => {
  6. await page.goto(BASE_URL);
  7. await page.waitForLoadState('networkidle');
  8. await page.getByPlaceholder('请输入用户名').fill(TEST_ADMIN.username);
  9. await page.getByPlaceholder('请输入密码').fill(TEST_ADMIN.password);
  10. await page.getByRole('button', { name: '登 录' }).click();
  11. await page.waitForURL(`${BASE_URL}/#/user/app`, { timeout: 10000 });
  12. });
  13. test('DG-001: 查看设备列表(分组视角)', async ({ page }) => {
  14. await page.goto(`${BASE_URL}/#/device`);
  15. await page.waitForLoadState('networkidle');
  16. await page.waitForTimeout(1000);
  17. const tableRows = page.locator('.el-table__body tr');
  18. const count = await tableRows.count();
  19. expect(count).toBeGreaterThanOrEqual(0);
  20. });
  21. test('DG-002: 按设备类型筛选(家庭设备)', async ({ page }) => {
  22. await page.goto(`${BASE_URL}/#/device`);
  23. await page.waitForLoadState('networkidle');
  24. const typeSelect = page.locator('.el-select').first();
  25. if (await typeSelect.isVisible()) {
  26. await typeSelect.click();
  27. await page.waitForTimeout(300);
  28. await page.getByRole('option', { name: '家庭设备' }).click();
  29. await page.getByRole('button', { name: '查询' }).click();
  30. await page.waitForTimeout(1000);
  31. }
  32. });
  33. test('DG-003: 按设备类型筛选(公共设备)', async ({ page }) => {
  34. await page.goto(`${BASE_URL}/#/device`);
  35. await page.waitForLoadState('networkidle');
  36. const typeSelect = page.locator('.el-select').first();
  37. if (await typeSelect.isVisible()) {
  38. await typeSelect.click();
  39. await page.waitForTimeout(300);
  40. await page.getByRole('option', { name: '公共设备' }).click();
  41. await page.getByRole('button', { name: '查询' }).click();
  42. await page.waitForTimeout(1000);
  43. }
  44. });
  45. test('DG-004: 按设备编号精确搜索', async ({ page }) => {
  46. await page.goto(`${BASE_URL}/#/device`);
  47. await page.waitForLoadState('networkidle');
  48. const searchInput = page.getByPlaceholder('请输入设备编号');
  49. if (await searchInput.isVisible()) {
  50. await searchInput.fill('AJY001');
  51. await page.getByRole('button', { name: '查询' }).click();
  52. await page.waitForTimeout(1000);
  53. }
  54. });
  55. test('DG-005: 按绑定用户名模糊搜索', async ({ page }) => {
  56. await page.goto(`${BASE_URL}/#/device`);
  57. await page.waitForLoadState('networkidle');
  58. const boundUserInput = page.getByPlaceholder('用户姓名模糊搜索');
  59. if (await boundUserInput.isVisible()) {
  60. await boundUserInput.fill('张');
  61. await page.getByRole('button', { name: '查询' }).click();
  62. await page.waitForTimeout(1000);
  63. }
  64. });
  65. test('DG-006: 按在线状态筛选-在线', async ({ page }) => {
  66. await page.goto(`${BASE_URL}/#/device`);
  67. await page.waitForLoadState('networkidle');
  68. const statusSelect = page.locator('.el-select').nth(1);
  69. if (await statusSelect.isVisible()) {
  70. await statusSelect.click();
  71. await page.waitForTimeout(300);
  72. await page.getByRole('option', { name: '在线' }).click();
  73. await page.getByRole('button', { name: '查询' }).click();
  74. await page.waitForTimeout(1000);
  75. }
  76. });
  77. test('DG-007: 按在线状态筛选-离线', async ({ page }) => {
  78. await page.goto(`${BASE_URL}/#/device`);
  79. await page.waitForLoadState('networkidle');
  80. const statusSelect = page.locator('.el-select').nth(1);
  81. if (await statusSelect.isVisible()) {
  82. await statusSelect.click();
  83. await page.waitForTimeout(300);
  84. await page.getByRole('option', { name: '离线' }).click();
  85. await page.getByRole('button', { name: '查询' }).click();
  86. await page.waitForTimeout(1000);
  87. }
  88. });
  89. test('DG-008: 重置查询条件', async ({ page }) => {
  90. await page.goto(`${BASE_URL}/#/device`);
  91. await page.waitForLoadState('networkidle');
  92. await page.getByRole('button', { name: '重置' }).click();
  93. await page.waitForTimeout(1000);
  94. const searchInput = page.getByPlaceholder('请输入设备编号');
  95. await expect(searchInput).toHaveValue('');
  96. });
  97. test('DG-009: 分页切换', async ({ page }) => {
  98. await page.goto(`${BASE_URL}/#/device`);
  99. await page.waitForLoadState('networkidle');
  100. const nextButton = page.locator('.btn-next').first();
  101. if (await nextButton.isVisible()) {
  102. await nextButton.click();
  103. await page.waitForTimeout(1000);
  104. }
  105. });
  106. test('DG-010: 新增设备-家庭设备', async ({ page }) => {
  107. await page.goto(`${BASE_URL}/#/device`);
  108. await page.waitForLoadState('networkidle');
  109. const addBtn = page.getByRole('button', { name: '新增' });
  110. if (await addBtn.isVisible()) {
  111. await addBtn.click();
  112. await page.waitForTimeout(500);
  113. await page.getByPlaceholder('请输入设备编号(如:AJY001)').fill('TEST' + Date.now());
  114. await page.getByPlaceholder('请输入设备名称').fill('测试设备');
  115. await page.locator('.el-select').nth(0).click();
  116. await page.waitForTimeout(300);
  117. await page.getByRole('option', { name: 'AJY-2026' }).click();
  118. await page.locator('.el-select').nth(1).click();
  119. await page.waitForTimeout(300);
  120. await page.getByRole('option', { name: '家庭设备' }).click();
  121. await page.getByPlaceholder('请输入设备序列号').fill('SN' + Date.now());
  122. await page.getByPlaceholder('请输入固件版本(如:v1.2.0)').fill('v1.2.0');
  123. await page.waitForTimeout(300);
  124. }
  125. });
  126. test('DG-011: 新增设备-公共设备', async ({ page }) => {
  127. await page.goto(`${BASE_URL}/#/device`);
  128. await page.waitForLoadState('networkidle');
  129. const addBtn = page.getByRole('button', { name: '新增' });
  130. if (await addBtn.isVisible()) {
  131. await addBtn.click();
  132. await page.waitForTimeout(500);
  133. await page.getByPlaceholder('请输入设备编号(如:AJY001)').fill('PUB' + Date.now());
  134. await page.getByPlaceholder('请输入设备名称').fill('公共设备测试');
  135. await page.locator('.el-select').nth(0).click();
  136. await page.waitForTimeout(300);
  137. await page.getByRole('option', { name: 'AJY-2026' }).click();
  138. await page.locator('.el-select').nth(1).click();
  139. await page.waitForTimeout(300);
  140. await page.getByRole('option', { name: '公共设备' }).click();
  141. await page.getByPlaceholder('请输入设备序列号').fill('SN' + Date.now());
  142. await page.getByPlaceholder('请输入固件版本(如:v1.2.0)').fill('v1.2.0');
  143. await page.waitForTimeout(300);
  144. }
  145. });
  146. test('DG-012: 设备编号必填验证', async ({ page }) => {
  147. await page.goto(`${BASE_URL}/#/device`);
  148. await page.waitForLoadState('networkidle');
  149. const addBtn = page.getByRole('button', { name: '新增' });
  150. if (await addBtn.isVisible()) {
  151. await addBtn.click();
  152. await page.waitForTimeout(500);
  153. await page.getByRole('button', { name: '保存' }).click();
  154. await page.waitForTimeout(500);
  155. }
  156. });
  157. test('DG-013: 设备型号必填验证', async ({ page }) => {
  158. await page.goto(`${BASE_URL}/#/device`);
  159. await page.waitForLoadState('networkidle');
  160. const addBtn = page.getByRole('button', { name: '新增' });
  161. if (await addBtn.isVisible()) {
  162. await addBtn.click();
  163. await page.waitForTimeout(500);
  164. await page.getByPlaceholder('请输入设备编号(如:AJY001)').fill('TEST' + Date.now());
  165. await page.getByPlaceholder('请输入设备名称').fill('测试设备');
  166. await page.getByRole('button', { name: '保存' }).click();
  167. await page.waitForTimeout(500);
  168. }
  169. });
  170. test('DG-014: 查看设备详情', async ({ page }) => {
  171. await page.goto(`${BASE_URL}/#/device`);
  172. await page.waitForLoadState('networkidle');
  173. const viewBtn = page.getByRole('button', { name: '查看' }).first();
  174. if (await viewBtn.isVisible()) {
  175. await viewBtn.click();
  176. await page.waitForTimeout(500);
  177. await page.getByRole('button', { name: '关闭' }).click();
  178. await page.waitForTimeout(300);
  179. }
  180. });
  181. test('DG-015: 编辑设备信息', async ({ page }) => {
  182. await page.goto(`${BASE_URL}/#/device`);
  183. await page.waitForLoadState('networkidle');
  184. const editBtn = page.getByRole('button', { name: '编辑' }).first();
  185. if (await editBtn.isVisible()) {
  186. await editBtn.click();
  187. await page.waitForTimeout(500);
  188. await page.getByPlaceholder('请输入设备名称').clear();
  189. await page.getByPlaceholder('请输入设备名称').fill('测试设备-已编辑');
  190. await page.waitForTimeout(300);
  191. }
  192. });
  193. });