203 lines
7.9 KiB
JavaScript
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);
|
|
});
|
|
});
|