const path = require('path'); const { parse } = require('csv-parse/sync'); const fs = require('fs'); const { faker } = require('@faker-js/faker'); const { test, expect } = require('./fixture/common'); const { Customer } = require('./pom/customerPage'); /**@type {{name: string, phone: string}[]} */ const records = parse(fs.readFileSync(path.join(__dirname, 'zhb.csv')), { columns: true, skip_empty_lines: true, }); test('csv', async ({ zhbPage }) => { console.log(records.length); const $$emptyRoom = zhbPage .locator('.area') .locator('.room-list .room') .filter({ has: zhbPage.getByText('空房') }); // 随机csv文件中的任意一个顾客 const record = records[faker.number.int({ min: 0, max: records.length - 1 })]; const { name, phone } = record; console.log({ name, phone }); const customer = new Customer({ name: name, phone: name }); /**@type {string} 房间名称 */ let useRoomName; await test.step('购买商品', async () => { await zhbPage.locator('#tab_main li').filter({ hasText: '营业' }).click(); await $$emptyRoom.first().waitFor(); useRoomName = await $$emptyRoom.first().locator('.roomName').innerText(); await $$emptyRoom.first().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: 10 })) .click(); await zhbPage.locator('#serviceSelector').getByText('确认').click(); await zhbPage .locator('div') .filter({ hasText: /^明星足浴$/ }) .locator('span') .first() .click(); await expect(async () => { await zhbPage.getByRole('button', { name: '完成开单' }).click(); await zhbPage.getByRole('button', { name: '结账' }).waitFor(); }).toPass(); 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/ ); }).toPass(); await zhbPage .locator('#page_footBathPay span') .filter({ hasText: /结\s算/ }) .click(); await expect(zhbPage.getByText('顾客满意度点评')).toBeVisible(); await zhbPage.getByText('不想评价').click(); await zhbPage.locator('#page_footBathPay').getByText('立即返回').click(); }); await test.step('起钟下钟,清理房间', async () => { const $$room = zhbPage.locator('.area').locator('.room-list .room'); const $cleanRoom = $$room.filter({ has: zhbPage.locator('.roomName', { hasText: new RegExp(`^${useRoomName}$`) }), }); await expect($cleanRoom).toContainText('已结清'); await $cleanRoom.click(); await zhbPage.getByText('技师操作').click(); await expect(async () => { await zhbPage.getByText('起钟', { exact: true }).click(); await zhbPage.getByText('起钟成功!').waitFor(); }).toPass(); 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('空房'); }); });