This repository has been archived on 2025-04-22. You can view files and clone it, but cannot push or open issues or pull requests.
playwright-demo/tests/zhb/demo.spec.js
2024-11-07 20:36:41 +08:00

203 lines
7.9 KiB
JavaScript

const { faker } = require('@faker-js/faker');
const { test, expect } = require('./fixture/common');
const { Customer } = require('./pom/customerPage');
test(`demo`, async ({ zhbPage, customerPage }, workerInfo) => {
const $area = zhbPage
.locator('.area')
.filter({ has: zhbPage.locator('.area-name', { hasText: '二楼' }) });
const $$room = $area.locator('.room-list .room');
const customer = new Customer();
await test.step('创建顾客', async () => {
await zhbPage.locator('#tab_main li').filter({ hasText: '顾客' }).click();
await customerPage.createCustomer(customer);
});
let useRoomName;
await test.step('购买商品', async () => {
await zhbPage.locator('#tab_main li').filter({ hasText: '营业' }).click();
const $emptyRoom = $$room
.filter({ has: zhbPage.getByText('空房') })
.nth(workerInfo.workerIndex % 3);
useRoomName = await $emptyRoom.locator('.roomName').innerText();
expect(useRoomName).not.toBeNull();
await $emptyRoom.click();
await expect(async () => {
if (await zhbPage.locator('.close > .iconfont').first().isVisible()) {
await zhbPage.locator('.close > .iconfont').first().click();
}
await zhbPage.getByRole('button', { name: '选择顾客' }).click({ timeout: 3000 });
await expect(zhbPage.locator('#page_searchMember').getByText('创建会员')).toBeVisible();
}).toPass();
await zhbPage
.getByRole('textbox', { name: '输入会员手机号或姓名或卡号搜索' })
.fill(customer.phone, { delay: 100 });
await zhbPage.locator('#page_searchMember svg').click();
const $customerTr = zhbPage
.locator('.list-warp')
.filter({ has: zhbPage.locator('.name', { hasText: customer.name }) });
await $customerTr.locator('.list-body').first().click();
await zhbPage.getByText('项目开单').click();
await expect(zhbPage.locator('#page_roomDetail').getByText('服务项目')).toBeVisible();
await zhbPage.getByText('选择', { exact: true }).nth(1).click();
await expect(zhbPage.locator('#serviceSelector').getByText('项目选择')).toBeVisible();
await zhbPage
.locator('.goods-content-item')
.nth(faker.number.int({ min: 0, max: 14 }))
.click();
await zhbPage.locator('#serviceSelector').getByText('确认').click();
await zhbPage
.locator('div')
.filter({ hasText: /^明星足浴$/ })
.locator('span')
.first()
.click();
await zhbPage.getByRole('button', { name: '完成开单' }).click();
await expect(zhbPage.getByRole('button', { name: '结账' })).toBeVisible({ timeout: 30_000 });
await zhbPage.getByRole('button', { name: '结账' }).click();
await zhbPage.locator('#page_footBathPay').getByText('结算签字').click();
await expect(async () => {
await zhbPage.locator('#page_footBathPay li').filter({ hasText: '现金' }).click();
await expect(zhbPage.locator('#page_footBathPay li').filter({ hasText: '现金' })).toHaveClass(
/selected/
);
await zhbPage
.locator('#page_footBathPay span')
.filter({ hasText: /结\s算/ })
.click();
await expect(zhbPage.getByText('顾客满意度点评')).toBeVisible({ timeout: 2000 });
}).toPass();
await zhbPage.getByText('不想评价').click();
await zhbPage.locator('#page_footBathPay').getByText('立即返回').click();
});
await test.step('起钟下钟,清理房间', async () => {
const $cleanRoom = $$room.filter({
has: zhbPage.locator('.roomName', { hasText: new RegExp(`^${useRoomName}$`) }),
});
await expect($cleanRoom).toContainText('已结清');
await $cleanRoom.click();
await zhbPage.getByText('技师操作').click();
await zhbPage.getByText('起钟', { exact: true }).click();
await zhbPage.getByText('起钟成功!').click();
await zhbPage.getByText('技师操作').click();
await zhbPage.getByText('下钟', { exact: true }).click();
await zhbPage
.locator('div')
.filter({ hasText: /^确认返回$/ })
.locator('div')
.first()
.click();
await zhbPage.getByRole('button', { name: '不需要' }).click();
await expect($cleanRoom).toContainText('打扫');
await $cleanRoom.click();
await zhbPage
.locator('div')
.filter({ hasText: /^确定取消$/ })
.locator('div')
.first()
.click();
await expect($cleanRoom).toContainText('空房');
});
});
test.skip('h5 demo', async ({
zhbAdminPage,
// zhbPage,
h5Page,
h5LoginPage,
// customerPage
}) => {
// const customer = new Customer();
// await test.step('创建顾客', async () => {
// await zhbPage.locator('#tab_main li').filter({ hasText: '顾客' }).click();
// await customerPage.createCustomer(customer);
// });
// await test.step('搜索顾客进行开卡', async () => {
// await zhbPage.getByRole('textbox', { name: '输入会员手机号或姓名搜索' }).fill(customer.phone);
// await zhbPage.locator('#page_member svg').click();
// await zhbPage
// .locator('.searchresultBox tbody tr')
// .first()
// .locator('#page_member')
// .getByText('详情')
// .click();
// await expect(zhbPage.getByText('会员卡 点击卡片即可用卡进行结算哦~')).toBeVisible();
// await zhbPage
// .locator('p')
// .filter({ hasText: '会员卡 点击卡片即可用卡进行结算哦~' })
// .locator('span')
// .nth(2)
// .click();
// await zhbPage.locator('#page_memberCard').getByText('5000元储值卡', { exact: true }).click();
// await expect(zhbPage.locator('#page_memberCard .cashierBox tbody tr').first()).toBeVisible();
// await zhbPage
// .locator('#page_memberCard')
// .getByText(/结\s算/)
// .click();
// await expect(async () => {
// const $signature = zhbPage.locator('#page_pay').getByText('结算签字');
// await $signature.click();
// await expect($signature).not.toHaveClass(/checked/, { timeout: 2000 });
// }).toPass();
// await expect(async () => {
// const $cashBtn = zhbPage.locator('#page_pay .pay_cash');
// await $cashBtn.click();
// await expect(zhbPage.locator('#page_pay .pay_cash.selected')).toBeVisible();
// await zhbPage
// .locator('#page_pay span')
// .filter({ hasText: /结\s算/ })
// .click();
// await expect(zhbPage.locator('#payConfirm').getByText('立即返回')).not.toBeVisible({
// timeout: 2000,
// });
// }).toPass();
// });
const $smsCodeInput = h5Page.getByRole('textbox', { name: '验证码', exact: true });
await test.step('获取手机验证码', async () => {
const graphCode = await h5LoginPage.sendSmsCode('17770898274');
await h5Page.getByRole('textbox', { name: '请输入图形验证码' }).fill(graphCode);
await h5Page.locator('#setup_loginForm').getByText('获取验证码').nth(1).first().tap();
await expect(h5Page.getByText('重新发送')).toBeVisible();
});
let smsCode;
await test.step('获取短信验证码', async () => {
await zhbAdminPage
.locator('a')
.filter({ hasText: /^管理$/ })
.click();
await zhbAdminPage.locator('.menu-item').getByText('短信发送记录', { exact: true }).click();
const $smsCodeTr = zhbAdminPage
.locator('#routerView iframe')
.contentFrame()
.locator('.table-responsive tbody tr')
.filter({ hasText: '17770898274' })
.first()
.locator('td')
.nth(2);
await expect($smsCodeTr).toBeVisible();
const text = await $smsCodeTr.innerText();
smsCode = text.match(/验证码是(\d{4})/)[1];
});
expect(smsCode).not.toBeUndefined();
await test.step('使用短信验证码登录h5', async () => {
await h5Page.getByRole('textbox', { name: '验证码', exact: true }).fill(smsCode);
await h5Page.locator('#setup_loginForm span').first().tap();
await h5Page.getByText('绑定', { exact: true }).tap();
await h5Page.waitForTimeout(5000);
});
});