diff --git a/package.json b/package.json index 44fdeb0..8d66a37 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "license": "ISC", "devDependencies": { "@faker-js/faker": "^8.4.1", - "@playwright/test": "^1.48.2", + "@playwright/test": "^1.51.1", "@types/node": "^22.3.0", "axios": "^1.7.4", "cross-env": "^7.0.3" @@ -31,7 +31,7 @@ "ldap": "^0.7.1", "ldap-authentication": "^3.2.2", "ldapjs": "^3.0.7", - "playwright": "^1.47.2", + "playwright": "^1.51.1", "qrcode-reader": "^1.0.4", "sharp": "^0.33.5", "tesseract.js": "^5.1.1", diff --git a/playwright.config.js b/playwright.config.js index c59b2ff..0b891c4 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -87,7 +87,7 @@ module.exports = defineConfig({ ...devices['Desktop Chrome'], baseURL: process.env.BASE_URL, storageState: firstAuthFile, - viewport: { width: 1280, height: 720 }, + // viewport: { width: 1280, height: 720 }, isMobile: true, }, testMatch: /.*boss_.*\.spec\.ts/, @@ -99,7 +99,7 @@ module.exports = defineConfig({ ...devices['Desktop Safari'], baseURL: process.env.BASE_URL, storageState: firstAuthFile, - viewport: { width: 1280, height: 720 }, + // viewport: { width: 1280, height: 720 }, isMobile: true, }, testMatch: /.*boss_.*\.spec\.ts/, @@ -110,7 +110,7 @@ module.exports = defineConfig({ use: { ...devices['Desktop Chrome'], baseURL: process.env.BASE_URL, - viewport: { width: 1280, height: 720 }, + // viewport: { width: 1280, height: 720 }, isMobile: false, }, testMatch: /.*staff_.*\.spec\.ts/, @@ -121,7 +121,7 @@ module.exports = defineConfig({ use: { ...devices['Desktop Safari'], baseURL: process.env.BASE_URL, - viewport: { width: 1280, height: 720 }, + // viewport: { width: 1280, height: 720 }, isMobile: false, }, testMatch: /.*staff_.*\.spec\.ts/, diff --git a/tests/fixtures/baseFixture.ts b/tests/fixtures/baseFixture.ts index b772759..3c1963c 100644 --- a/tests/fixtures/baseFixture.ts +++ b/tests/fixtures/baseFixture.ts @@ -14,8 +14,13 @@ export const test = base.extend({ await expect(page.locator('.versionModal_main_content')).toBeVisible(); }); - if (!baseURL) throw new Error('baseURL is required'); - await page.goto(baseURL); + try { + await page.goto(baseURL!, { timeout: 90 * 1000 }); + } catch (error) { + console.log(error); + // await page.screenshot({ path: 'error.png' }); + await page.reload(); + } // await page.getByRole('button', { name: /开\s单/ }).waitFor(); await expect(page.getByRole('button', { name: /开\s单/ })).toBeEnabled(); diff --git a/tests/setup/boss_auth.setup.ts b/tests/setup/boss_auth.setup.ts index 20ffd91..9cd8084 100644 --- a/tests/setup/boss_auth.setup.ts +++ b/tests/setup/boss_auth.setup.ts @@ -18,7 +18,13 @@ for (let testAccount of testAccountArray) { .locator('div', { has: page.getByRole('textbox', { name: '请输入您的手机号码' }) }) .locator('.pass_svg'); - await page.goto(baseURL!); + try { + await page.goto(baseURL!, { timeout: 90 * 1000 }); + } catch (error) { + console.log(error); + await page.bringToFront(); + await page.reload(); + } await page.getByRole('textbox', { name: '请输入您的手机号码' }).fill(account); await page.getByRole('textbox', { name: '请输入登录密码' }).fill(password); await page.getByLabel('请同意慧来客隐私政策和用户协议').check(); @@ -41,6 +47,6 @@ for (let testAccount of testAccountArray) { await page.getByRole('button', { name: /登\s录/ }).click(); await page.getByRole('button', { name: /开\s单/ }).waitFor(); } - await page.context().storageState({ path: authFile }); + await page.context().storageState({ path: authFile, indexedDB: true }); }); } diff --git a/tests/setup/staff_auth.setup.ts b/tests/setup/staff_auth.setup.ts index 97a3297..e1fcbaf 100644 --- a/tests/setup/staff_auth.setup.ts +++ b/tests/setup/staff_auth.setup.ts @@ -31,7 +31,7 @@ setup.describe('员工登录', () => { await page.getByLabel('请同意慧来客隐私政策和用户协议').check(); await $login.click(); await expect(page.getByRole('button', { name: /开\s单/ })).toBeEnabled(); - await page.context().storageState({ path: e.authFile }); + await page.context().storageState({ path: e.authFile, indexedDB: true }); }); } }); diff --git a/tests/touch/boss_cashier.spec.ts b/tests/touch/boss_cashier.spec.ts index dd6c426..81168bb 100644 --- a/tests/touch/boss_cashier.spec.ts +++ b/tests/touch/boss_cashier.spec.ts @@ -37,39 +37,15 @@ test.describe('挂单', () => { }); test('查看员工名下挂单', async ({ page, customerPage }) => { - let OrderLQ = 0; - let OrderZP = 0; - const $employeeBottom = page.locator('.userpanel_item'); - - await test.step('记录员工原挂单数量', async () => { - - await expect(page.getByRole('button', { name: /^开\s单$/ })).toBeVisible(); - - // 点击底部员工刘强 - const EmployeeLQ = $employeeBottom.getByText(Employees.FirstShop.Employee_8.name); - if (await EmployeeLQ.isVisible()) { - await $employeeBottom.filter({ hasText: Employees.FirstShop.Employee_8.name }).click(); - await page.locator('.item_box').first().waitFor(); - OrderLQ = await page.locator('.item_box').count(); - } else { - OrderLQ = 0; - } - - // 点击底部员工周萍 - const EmployeeZP = $employeeBottom.getByText(Employees.FirstShop.Employee_9.name); - if (await EmployeeZP.isVisible()) { - await $employeeBottom.filter({ hasText: Employees.FirstShop.Employee_9.name }).click(); - await page.locator('.item_box').first().waitFor(); - OrderZP = await page.locator('.item_box').count(); - } else { - OrderZP = 0; - } - }); + const employeeLq = $employeeBottom.getByText(Employees.FirstShop.Employee_8.name); + const employeeZp = $employeeBottom.getByText(Employees.FirstShop.Employee_9.name); const $employeeLq = page.locator('.counselor:nth-child(2)').locator('.check_item:nth-child(1)').filter({ hasText: Employees.FirstShop.Employee_8.name }); - await test.step('刘强挂单1', async () => { + const $$pendingOrderCard = page.locator('.cash_content .list .item_box'); + + await test.step('刘强挂单', async () => { //员工1开第1单 await page.getByRole('button', { name: /^开\s单$/ }).click(); await customerPage.searchCustomer(phone); @@ -84,46 +60,13 @@ test.describe('挂单', () => { await page.locator('button.save_and_copy').filter({ hasText: '保存并复制到其他项目/卖品' }).click(); // 挂单 await page.locator('#cart_bottom_btn').getByText('挂单').click(); - }); - - await test.step('刘强挂单2', async () => { - //员工1开第2单 - await page.getByRole('button', { name: /^开\s单$/ }).click(); - await customerPage.searchCustomer(phone); - await customerPage.selectSearchCustomer(username); - - // 选择第三个项目 - await page.locator('.project_list').filter({ hasText: ProjectName.Projects.Projects_3.name }).click(); - // 选择添加员工 - await page.locator('button.staff_btn').click(); - // 选择员工:刘强 - await $employeeLq.click(); - // 保存并复制到其他项目 - await page.locator('button.save_and_copy').filter({ hasText: '保存并复制到其他项目/卖品' }).click(); - // 挂单 - await page.locator('#cart_bottom_btn').getByText('挂单').click(); - }); - - await test.step('刘强挂单3', async () => { - //员工1开第3单 - await page.getByRole('button', { name: /^开\s单$/ }).click(); - await customerPage.searchCustomer(phone); - await customerPage.selectSearchCustomer(username); - // 选择第二个项目 - await page.locator('.project_list').filter({ hasText: ProjectName.Projects.Projects_2.name }).click(); - // 选择添加员工 - await page.locator('button.staff_btn').click(); - // 选择员工:刘强 - await $employeeLq.click(); - // 保存并复制到其他项目 - await page.locator('button.save_and_copy').filter({ hasText: '保存并复制到其他项目/卖品' }).click(); - // 挂单 - await page.locator('#cart_bottom_btn').getByText('挂单').click(); + await expect.soft($$pendingOrderCard.first()).toContainText(`${username}`); + await expect($$pendingOrderCard.first()).toContainText(`${Employees.FirstShop.Employee_8.name}`); }); const $employeeZp = page.locator('.counselor:nth-child(2)').locator('.check_item:nth-child(1)').filter({ hasText: Employees.FirstShop.Employee_9.name }); - await test.step('周萍挂单1', async () => { + await test.step('周萍挂单', async () => { //员工2开第1单 await page.getByRole('button', { name: /^开\s单$/ }).click(); await customerPage.searchCustomer(phone); @@ -140,41 +83,20 @@ test.describe('挂单', () => { await page.locator('button.save_and_copy').filter({ hasText: '保存并复制到其他项目/卖品' }).click(); // 挂单 await page.locator('#cart_bottom_btn').getByText('挂单').click(); + await expect.soft($$pendingOrderCard.first()).toContainText(`${username}`); + await expect($$pendingOrderCard.first()).toContainText(`${Employees.FirstShop.Employee_9.name}`); }); - await test.step('周萍挂单2', async () => { - //员工2开第2单 - await page.getByRole('button', { name: /^开\s单$/ }).click(); - await customerPage.searchCustomer(phone); - await customerPage.selectSearchCustomer(username); - // 选择第二个项目 - await page.locator('.project_list').filter({ hasText: ProjectName.Projects.Projects_2.name }).click(); - // 选择添加员工 - await page.locator('button.staff_btn').click(); - // 选择员工:周萍 - await $employeeZp.click(); - // 保存并复制到其他项目 - await page.locator('button.save_and_copy').filter({ hasText: '保存并复制到其他项目/卖品' }).click(); - // 挂单 - await page.locator('#cart_bottom_btn').getByText('挂单').click(); - // 等待挂单成功 - await page.locator('.ant-message').waitFor(); - // 判断挂单成功弹窗消失后再执行下一步 - await expect(page.locator('.ant-message')).not.toBeVisible(); - }); - - await test.step('最后校验挂单数量', async () => { + await test.step('校验各个员工的挂单', async () => { // 点击底部员工刘强 - await $employeeBottom.filter({ hasText: Employees.FirstShop.Employee_8.name }).click(); - await page.locator('.item_box').first().waitFor(); - const order = await page.locator('.item_box').all(); - expect(order.length).toBe(3 + OrderLQ); + await employeeLq.click(); + await expect.soft($$pendingOrderCard.first()).toContainText(`${username}`); + await expect($$pendingOrderCard.first()).toContainText(`${Employees.FirstShop.Employee_8.name}`); // 点击底部员工周萍 - await $employeeBottom.filter({ hasText: Employees.FirstShop.Employee_9.name }).click(); - await page.locator('.item_box').first().waitFor(); - const order1 = await page.locator('.item_box').all(); - expect(order1.length).toBe(2 + OrderZP); + await employeeZp.click(); + await expect.soft($$pendingOrderCard.first()).toContainText(`${username}`); + await expect($$pendingOrderCard.first()).toContainText(`${Employees.FirstShop.Employee_9.name}`); }); });