119 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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');
 | |
| 
 | |
| const records = parse(fs.readFileSync(path.join(__dirname, 'zhb.csv')), {
 | |
|   columns: true,
 | |
|   skip_empty_lines: true,
 | |
| });
 | |
| 
 | |
| test('csv', async ({ zhbPage }, workerInfo) => {
 | |
|   console.log(records.length);
 | |
|   const $area = zhbPage
 | |
|     .locator('.area')
 | |
|     .filter({ has: zhbPage.locator('.area-name', { hasText: '二楼' }) });
 | |
|   const $$room = $area.locator('.room-list .room');
 | |
| 
 | |
|   // 随机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 });
 | |
| 
 | |
|   // 使用房间名称
 | |
|   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('空房');
 | |
|   });
 | |
| });
 | 
